【发布时间】:2014-03-31 07:29:47
【问题描述】:
我有以下代码来操作和压缩 TIFF 图像。
<?php
try{
$imagesrc = "C:\\server\\www\\imagick\\src.tif";
$imagedestination = "C:\\server\\www\\imagick\\converted.tif";
$im=new Imagick();
$im->readImage($imagesrc); //read image for manipulation
$im->setImageColorSpace(Imagick::COLORSPACE_CMYK);
$im->setImageDepth(8); //8 Bit
$im->setImageResolution(300,300); //set output resolution to 300 dpi
$im->setImageUnits(1); //0=undefined, 1=pixelsperInch, 2=PixelsPerCentimeter
$im->setImageCompression(Imagick::COMPRESSION_LZW);
$im->setImageCompressionQuality(80);
$im->writeImage($imagedestination);
$im->clear();
$im->destroy();
$im=NULL;
}catch(ImagickException $e){
echo "Could not convert image - ".$e->getMessage();
}
?>
源图像为 19MB。当我使用此代码时,生成的 TIF 图像大约为 25MB。也就是说,代码根本没有压缩图像。其他压缩方法也对生成的 TIFF 文件没有影响,但是如果我使用压缩方法Imagick::COMPRESSION_JPEG,生成的图像为 2MB
我无法使用 JPEG 压缩,因为我使用带有 itextsharp 的生成 TIFF 图像嵌入 PDF。 JPEG 压缩会产生 itextsharp 不支持的多条 tiff 图像。
所以我的问题有两种可能的答案。任何一个答案都对我有用
- 如何有效压缩tif?
- 如何将多条 tif 图像转换为单条。
谢谢
【问题讨论】:
-
The source image is 19MB- 这听起来像是一个相当大的图像,因为 COMPRESSION_LZW/q=0.8 会生成更大的文件管理器。图片的尺寸是给定的,不能更改? -
你的图片尺寸是多少?
-
@VolkerK,我们可以在质量上妥协,但不能在图像尺寸上妥协。图像尺寸为 3655x3735 像素。源图像的尺寸和大小可能会因用户上传的内容而异。
-
抱歉唠叨:
in a quality but not in image dimensiontiff 格式可以存储 dpi - 它真的是您需要保持不变的像素大小还是输出尺寸(作为像素/dpi)?我看到您将 dpi 设置为 300,但也可以将其设置为 72 吗? -
@VolkerK,像素大小需要保持不变。这意味着,我们可以更改 DPI,但我也尝试过,我将输出 DPI 从 300 更改为 170,文件大小没有变化。