我在这里和这里使用 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(。
有没有办法使用 GD 设置 DPI?
似乎PHP GD扩展在写入图像文件时无法直接指定DPI。不过,您有两种选择:
- 将 GD 源代码中的
#define GD_RESOLUTION 72
更改为所需的值,并自行重新编译 GD 扩展。请注意,这将对GD保存在系统上的所有图像产生影响。 - 操作二进制文件(JPEG 或 PNG?(以更改文件头中的 DPI 值。DPI只是一个元值,它与像素数据没有联系。
这让我想到了一个问题,如果您只需要更改 DPI 值,为什么要调整图像大小?或者反过来 - 为什么在调整图像大小时需要更改 DPI?图像是否用于打印?