ImageMagick не меняет разрешение на картинке

У меня есть проект, в котором у меня есть система «горячих папок», в которую я помещаю файл в папку, и он выполняет сценарий 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 что это идет не так.

JPEG всегда 300 DPI, даже если я указал 72 выше.

1

Решение

Я обнаружил, что мне нужно сделать это, чтобы удалить любой профиль, прикрепленный к файлу, чтобы иметь возможность вносить изменения в изображение.

$im->stripimage();
5

Другие решения

Обновленный ответ

Я сделал следующее:

# 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
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector