2014-11-03 105 views
1

我有一个项目,我有一个hotfolder系统,我将一个文件放在一个文件夹中,它执行一个PHP脚本,通过ImageMagick对文件执行一些魔术。ImageMagick不改变图片上的分辨率

我想要对ImageMagick执行的操作之一是更改图片分辨率的简单过程。

我想要做的是以72 DPI分辨率获取图片。这是我的代码的一部分:

$im = new Imagick(); 
$im->setResolution(72,72); 
$im->readimage($xmlConfig->general->input); //Input is TIF 300 DPI 
$im->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH); 
$im->setImageResolution(72,72); 
$im->resampleImage(72,72,imagick::FILTER_UNDEFINED,0); 
$im->setimageformat($xmlConfig->extension); //added in EDIT 
$im->writeimage($xmlConfig->general->output); //Output is also 300 DPI Filename is something.jpg added in EDIT 
$im->destroy(); 

那么,我做错了什么?因为我无法得到这个工作。我尝试了所有可用的组合来试图获得这个正确的,并且将它作为一个疯子使用,并且仍然没有得到我想要的结果。

**编辑:*我注意到,当我做了一些测试,这实际上工作。但是,当我将setimageformat部分添加到JPEG并将文件名设置为something.jpg它出错了。

即使我指定了72以上,JPEG始终为300 DPI。

回答

3

我发现,我需要这样做是为了去除附着在文件中的任何配置文件能够做到的变化到图片。

$im->stripimage(); 
+0

这是我拔出头发后修复它的唯一方法:D谢谢 – 2015-10-02 12:21:31

2

更新回答

我做了以下内容:

# Create a TIF with density 300 and undefined units 
convert -size 1000x1000 -density 300 xc:red input.tif 

# Check what got created 
identify -verbose input.tif | egrep -i "units|resol" 
Resolution: 300x300 
Units: Undefined 

然你的代码,修改如下:

#!/usr/local/bin/php 
<?php 
$im = new Imagick(); 
$im->setResolution(72,72); 
$im->readimage('input.tif'); //Input is TIF 300 DPI 
$im->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH); 
$im->setImageResolution(72,72); 
$im->resampleImage(72,72,imagick::FILTER_UNDEFINED,0); 
$im->setimageformat('jpeg'); 
$im->writeimage("output.jpg"); 
$im->destroy(); 
?> 

然后检查,并得到这个:

identify -verbose output.jpg | egrep -i "units|resol" 
Resolution: 72x72 
Units: PixelsPerInch 

原创回答

我的答案是,你的ImageMagick可能是一个过时的版本,你应该更新它。我的依据是以下几点:

# Create a TIF with density 300 and undefined units 
convert -size 1000x1000 -density 300 xc:red input.tif 

# Check what got created 
identify -verbose input.tif | egrep -i "units|resol" 
Resolution: 300x300 
Units: Undefined 

# Run your script 
./go.php 

# Check results 
identify -verbose output.tif | egrep -i "units|resol" 
Resolution: 72x72 
Units: PixelsPerInch 

我的版本如下:

Version: ImageMagick 6.8.9-8 Q16 x86_64 2014-10-26 http://www.imagemagick.org 
+0

嗨,我已经编辑了我的问题上面,因为我注意到这个代码实际上工作,并且它是当我设置JPEG作为输出格式和文件名为JPG,它成为错误。你能否测试这一点,看看你是否得到相同的结果。在这种情况下,我需要升级到Imagemagick的最新版本,因为我有6.8.8我认为 – 2014-11-05 11:33:44

+0

我为你运行 - 看到更新的答案。 – 2014-11-05 12:11:13

+0

我认为问题在于我的TIF有一个配置文件,其中包含图片在300 DPI的位置。您需要在具有与您的目标DPI不同的DPI的配置文件的映像上测试您的代码。然后,如果我在转换上运行stripimage命令,我会得到DPI更改,否则它只会使用原始TIFF中的配置文件中的分辨率。 – 2014-11-06 08:40:26