Я нашел решения Вот а также Вот используя 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?
Похоже, расширение PHP GD не может указать DPI напрямую при записи файла изображения. У вас есть два варианта:
#define GD_RESOLUTION 72
в исходном коде GD до желаемого значения и перекомпилируйте расширение GD самостоятельно. Будьте осторожны, это повлияет на все изображения, сохраненные GD в вашей системе.Что приводит меня к вопросу, почему вы изменяете размер изображения, если вам нужно только изменить значение DPI? Или наоборот — зачем вам нужно менять DPI, когда вы все равно изменяете размер изображения? Используется ли изображение для печати?
Других решений пока нет …