【问题标题】:ImageMagick doesn't change resolution on pictureImageMagick 不会改变图片的分辨率
【发布时间】:2014-11-03 13:41:51
【问题描述】:

我有一个项目,我有一个 hotfolder 系统,我将一个文件放到一个文件夹中,它执行一个 PHP 脚本,该脚本使用 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。

【问题讨论】:

    标签: php imagemagick resolution dpi


    【解决方案1】:

    我发现我需要这样做才能删除附加到文件的任何配置文件才能对图片进行更改。

    $im->stripimage();
    

    【讨论】:

    • 这是为我修复它的唯一方法,在拔掉我的头发后:D 谢谢
    【解决方案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
    

    【讨论】:

    • 嗨,我已经在上面编辑了我的问题,因为我注意到这段代码确实有效,而且当我将 JPEG 设置为输出格式并将文件名设置为 JPG 时,它就出错了。你能不能也测试一下,看看你是否得到相同的结果。在那种情况下,我需要升级到最新版本的 Imagemagick,因为我认为我有 6.8.8
    • 我认为问题在于我的 TIF 包含一个配置文件,其中声明图像为 300 DPI。您需要在附加配置文件的图像上测试您的代码,该配置文件的 DPI 与目标 DPI 不同。然后,如果我在转换上运行 stripimage 命令,我会更改 DPI,否则它只会使用原始 TIFF 中配置文件的分辨率。
    • 啊,是的。我可以想象。
    猜你喜欢
    • 1970-01-01
    • 2016-09-09
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多