Как я могу установить DPI/PPI через изменение размера GD?

Я нашел решения здесь и здесь, используя Imagick, но я действительно не хочу идти, хотя расширение Imagick из-за проблем безопасности.

В настоящее время я делаю изменение размера следующим образом:

list($width, $height) = getimagesize($file_path);

$src = imagecreatefrompng($file);
$dst = imagecreatetruecolor($newwidth, $newheight);

//prepare the transparency
imagealphablending($dst, false);
imagesavealpha( $dst , true );
$transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);

imagefilledrectangle($dst, 0, 0, $newwidth, $newheight, $transparent);

imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

Но он всегда устанавливает 72 DPI (переопределяя даже исходный файл DPI).

Есть ли способ установить DPI с помощью GD?

1 ответ

Решение

Похоже, расширение PHP GD не может указать DPI напрямую при записи файла изображения. У вас есть два варианта:

  • Изменить #define GD_RESOLUTION 72 в исходном коде GD до желаемого значения и самостоятельно перекомпилируйте расширение GD. Будьте осторожны, это повлияет на все изображения, сохраненные GD в вашей системе.
  • Управляйте двоичным файлом (JPEG или PNG?), Чтобы изменить значение DPI в заголовке файла. DPI - это только мета-значение, оно не связано с данными пикселей.

Что приводит меня к вопросу, почему вы изменяете размер изображения, если вам нужно только изменить значение DPI? Или наоборот - зачем вам нужно менять DPI, когда вы все равно изменяете размер изображения? Используется ли изображение для печати?

Другие вопросы по тегам