2015-01-05 3 views
2

Невозможно преобразовать изображение JPEG в PNG-изображение 300 DPI, используя ImageMagick.Преобразование JPEG в PNG с 300 DPI

После преобразования изображение PNG составляет только 72 DPI. Я использую ImageMagick 6.9.0-0 Q16 x86 и Ghostscript v9.15.

Ниже строки я использую в моем сценарии Perl:

system("\"$imagemagick\" -set units PixelsPerInch -density 300 \"$jpg\" \"$png\""); 
+5

Почему, на ваш взгляд, это проблема с Perl? Это работает, если вы делаете «imagemagick -set units PixelsPerInch -density 300 in.jpg out.png' из-за пределов Perl? – ikegami

+0

Если вы используете Perl, почему вы не используете модуль [Image :: Magick Perl] (https://metacpan.org/pod/Image::Magick)? –

ответ

1

Настройка единицы измерения & плотность не будет изменять данные, подчеркивающие изображения, но обновляет мета информацию для рендеринга библиотеки. Важно, чтобы вектор был растровым, но не очень полезен для растрового растра. Для настройки DPI изображения используйте операцию -resample.

convert source.jpg -resample 300 out.png 

Вы проверяете разрешение DPI со следующим ...

identify -format "%[resolution.x] %[resolution.y]\n" out.png 
0

мне интересно, где 72dpi откуда. Предполагая, что вы используете X и какой-то Unix, по умолчанию для ImageMagick используется разрешение экрана (72 dpi). Я не уверен, что он делает в OSX/XQuartz, но, похоже, похоже. Является ли разрешение экрана равным 72dpi (!?).

Я с @emcconville @ikegami - просто сделайте это прямо из ImageMagick на командной строке - передайте правильные параметры, чтобы быть уверенным.

Есть модули манипуляции изображениями, которые вы можете использовать из perl, не прибегая к системным командам, например Imager::Transformations, Image::Magick и GD. Вот как конвертировать с GD.

perl -MGD -E 'my $imgjpg = GD::Image->newFromJpeg("img.jpg"); 
open my $imgpng, ">", "img.png" or die; print $imgpng $imgjpg->png();' 

С большинством манипуляций с изображениями пакеты оригинальное разрешение шоу поддерживается во время преобразования - хотя некоторые (включая GD) будет по умолчанию для снижения глубины цвета (8 бит), если не был принят флаг полноцветные.

, например.GD::Image->newFromJpeg("img.jpg", 1);

Смежные вопросы