如何通过调整 GD 大小来设置 DPI/PPI?
How can I set DPI/PPI through an GD resize?
我找到了使用 Imagick 的解决方案 here and here,但由于安全问题,我真的不想通过 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 吗?
好像PHPGD扩展在写图片文件的时候没有办法直接指定DPI。不过你有两个选择:
- 将GD源代码中的
#define GD_RESOLUTION 72
更改为您想要的值,然后自行重新编译GD扩展。请注意,这将影响 GD 在您系统上保存的所有图像。
- 处理二进制文件(JPEG 或 PNG?)以更改文件头中的 DPI 值。 DPI只是一个meta-value,跟像素数据没有关系
这让我想到了一个问题,如果您只需要更改 DPI 值,为什么还要调整图像大小?或者反过来 - 为什么在调整图像大小时需要更改 DPI?图片是否用于打印?
我找到了使用 Imagick 的解决方案 here and here,但由于安全问题,我真的不想通过 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 吗?
好像PHPGD扩展在写图片文件的时候没有办法直接指定DPI。不过你有两个选择:
- 将GD源代码中的
#define GD_RESOLUTION 72
更改为您想要的值,然后自行重新编译GD扩展。请注意,这将影响 GD 在您系统上保存的所有图像。 - 处理二进制文件(JPEG 或 PNG?)以更改文件头中的 DPI 值。 DPI只是一个meta-value,跟像素数据没有关系
这让我想到了一个问题,如果您只需要更改 DPI 值,为什么还要调整图像大小?或者反过来 - 为什么在调整图像大小时需要更改 DPI?图片是否用于打印?