【问题标题】:How can I set DPI/PPI through an GD resize?如何通过 GD 调整大小设置 DPI/PPI?
【发布时间】:2017-02-15 13:07:42
【问题描述】:

我使用 Imagick 找到了解决方案 herehere,但由于安全问题,我真的不想使用 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 dpi php-gd ppi


    【解决方案1】:

    似乎 PHP GD 扩展在写入图像文件时无法直接指定 DPI。不过,您有两种选择:

    • 将 GD 源代码中的 #define GD_RESOLUTION 72 更改为您想要的值,然后自行重新编译 GD 扩展。请注意,这将影响 GD 保存在您系统上的所有图像。
    • 处理二进制文件(JPEG 或 PNG?)以更改文件头中的 DPI 值。 DPI 只是一个元值,它与像素数据无关。

    这让我想到了一个问题,如果您只需要更改 DPI 值,为什么要调整图像大小?或者反过来 - 为什么在调整图像大小时需要更改 DPI?图片是用来打印的吗?

    【讨论】:

    • 我想要两张图像:一张用于普通显示器,另一张(双倍 DPI)用于高密度显示器,如视网膜和 4k 显示器。我正在调整大小,因为原始图像比我需要的分辨率大得多。
    • 那么你根本不需要改变DPI。只需创建缩小的图像并使用例如img srcset 让浏览器决定显示哪张图片。
    • 感谢您的帮助!这正是我想要的。
    • 从 PHP 7.2.0 开始,PHP 支持 imageresolution() 函数,它允许您设置或获取 GdImage 的分辨率。
    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多