PHP 图像处理 GD JPEG 质量

标签 php image-processing jpeg gd

我开始使用 WideImage图像处理库,我对它生成的 JPEG 图像的质量有疑问。 WideImage 实际上使用了 GD ,所以我只使用 GD PHP 图像函数进行测试。

我的最终目标是调整图像大小,但这是我没有进行调整大小的测试代码:

$srcImage = "path/to/image.jpg";
list($width, $height) = getimagesize($srcImage);
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($srcImage);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height);
imagejpg($image_p, "path/to/image_resized.jpg", 100);

这可行,但输出的原始图像质量较低且褪色版本。 下面是原始分割线旁边的示例:

Example Image

当我也执行调整大小时会发生这种情况,但我想保持与原始图像相同的颜色/质量。

有没有人对我如何实现这一目标有任何想法?我的 php.ini 中是否有我遗漏的设置或其他设置?我也尝试使用 imagepng() 但结果大致相同。

我使用的是 PHP 版本 5.3.29,这是来自 phpinfo() 的 GD 信息:

GD Support        : enabled
GD Version        : bundled (2.1.0 compatible)
FreeType Support  : enabled
FreeType Linkage  : with freetype
FreeType Version  : 2.3.11
T1Lib Support     : enabled
GIF Read Support  : enabled
GIF Create Support: enabled
JPEG Support      : enabled
libJPEG Version   : 6b
PNG Support       : enabled
libPNG Version    : 1.2.49
WBMP Support      : enabled
XPM Support       : enabled
libXpm Version    : 30411
XBM Support       : enabled

谢谢!

squeamish ossifrage 的要求,这里是 original fileconverted file .

编辑 - 根据下面标记为正确的敏感 ossifrage 的回答,我采取了以下步骤来解决问题:

在服务器上安装了exiftool

使用 PHP 生成以下命令:

exiftool -TagsFromFile "/var/www/vhosts/path/to/image/the file name.jpg" -icc_profile "/var/www/vhosts/path/to/image-processed/the file name.jpg"

使用 PHP 的 exec() 方法运行命令:

$arrOutput = array();
$return_var = "";
$directOutput = exec($exiftoolCommand, $arrOutput, $return_var);

像魅力一样工作!

最佳答案

原始图像包含 ICC 颜色配置文件。 GD 对颜色配置文件一无所知,因此转换后的文件中缺少此信息。要解决此问题,您基本上有两种选择:

  1. 保存没有颜色配置文件的原始文件,或者

  2. 将颜色配置文件从原始文件复制到转换后的文件。

如果您打算在网络上发布此文件,我会选择选项 1,因为颜色配置文件和其他 EXIF 信息无缘无故地占用带宽。

或者,您可以使用 exiftool 等免费工具将颜色配置文件从一个文件复制到另一个文件。这应该在命令行上工作:

exiftool -TagsFromFile so_original.jpg -icc_profile so_converted.jpg

关于PHP 图像处理 GD JPEG 质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25866819/

相关文章:

c++ - 没有 DLL 的 JPEG 压缩

php - 这是关于 Jquery/JS 的,如果我更改元素的 HTML - 我是否能够对其执行其他 Jquery/JS 操作

php - 从 MySql 上的多对多表中的两个主键获取一行

javascript - 使用 tracking.js 跟踪眼球

android - Android 上的图像处理 - 我可以使用哪些库?

使用 Windows 成像组件 (WIC) 的 Delphi 2007

c++ - 使用 boost::gil 从内存中读取 JPEG 图像

php - 插入的数据不会进入 phpMyAdmin 数据库

php - 连接到生产服务器上的 MySQL 数据库时出现问题

matlab - matlab中分割遮挡叶子的分水岭分割算法