PHP GD 库中不支持 PNG,但支持 GIF 和 JPEG。我怎样才能解决这个问题?

Posted

技术标签:

【中文标题】PHP GD 库中不支持 PNG,但支持 GIF 和 JPEG。我怎样才能解决这个问题?【英文标题】:No PNG support in PHP GD Library but has GIF and JPEG Support. How can I fix this? 【发布时间】:2014-09-27 06:51:29 【问题描述】:

我在 OS X Yosemite 上运行 MAMP 服务器版本 3.0.5。在执行期间,我的 php 文件似乎缺少 PNG 支持 甚至在我拥有 MAMP 2.1 之前,它在 png 相关功能上就出现了致命错误。

Jpeg 函数可以正常工作。

这就是我的 phpinfo 的样子:

Build Date  Apr 10 2014 17:21:18
Configure Command   './configure' '--with-mysql=/Applications/MAMP/Library' '--with-apxs2=/Applications/MAMP/Library/bin/apxs' '--with-gd' '--with-jpeg-dir=/Applications/MAMP/Library' '--with-png-dir=/Applications/MAMP/Library' '--with-zlib' '--with-zlib-dir=/Applications/MAMP/Library' '--with-freetype-dir=/Applications/MAMP/Library' '--prefix=/Applications/MAMP/bin/php/php5.5.10' '--exec-prefix=/Applications/MAMP/bin/php/php5.5.10' '--sysconfdir=/Applications/MAMP/bin/php/php5.5.10/conf' '--with-config-file-path=/Applications/MAMP/bin/php/php5.5.10/conf' '--enable-ftp' '--enable-gd-native-ttf' '--with-bz2=/usr' '--with-ldap' '--with-mysqli=/Applications/MAMP/Library/bin/mysql_config' '--with-t1lib=/Applications/MAMP/Library' '--enable-mbstring=all' '--with-curl=/Applications/MAMP/Library' '--enable-sockets' '--enable-bcmath' '--with-imap=shared,/Applications/MAMP/Library/lib/imap-2007f' '--enable-soap' '--with-kerberos' '--enable-calendar' '--with-pgsql=shared,/Applications/MAMP/Library/pg' '--enable-exif' '--with-libxml-dir=/Applications/MAMP/Library' '--with-gettext=shared,/Applications/MAMP/Library' '--with-xsl=/Applications/MAMP/Library' '--with-pdo-mysql=shared,/Applications/MAMP/Library' '--with-pdo-pgsql=shared,/Applications/MAMP/Library/pg' '--with-mcrypt=shared,/Applications/MAMP/Library' '--with-openssl' '--enable-zip' '--with-iconv=/Applications/MAMP/Library' '--enable-opcache' '--enable-intl' '--with-tidy=shared' '--with-icu-dir=/Applications/MAMP/Library'

这就是 GD 部分包含的内容:

GD Support  enabled
GD Version  bundled (2.1.0 compatible)
FreeType Support    enabled
FreeType Linkage    with freetype
FreeType Version    2.4.12
T1Lib Support   enabled
GIF Read Support    enabled
GIF Create Support  enabled
JPEG Support    enabled
libJPEG Version 8
PNG Support enabled
libPNG Version  1.6.6
WBMP Support    enabled
XBM Support enabled

为了测试代码存在的 png 执行和 gd 库,我运行以下代码:

if (extension_loaded('gd')) 
  echo "\nGD support is -Loaded-";
else
  echo "\nGD support is == NOT == loaded ";

if(function_exists('gd_info'))
  echo "\nGD function support is -Available- ";
else
  echo "\nGD function support is == NOT == available ";


if(function_exists('imagepng'))
  echo "\nimagepng() -Exists-";
else
  echo "\nimagepng() ==== DOES NOT ==== Exist";



if(function_exists('imagejpeg'))
  echo "\nimagejpeg() -Exists-";
else
  echo "\nImage Function ==== DOES NOT ==== Exists";

这是我得到的结果:

我注意到的一件事是 GD 中的 libPNG 版本是“1.6.6”,而我电脑上的版本是“1.6.12”。是否有可能导致 PNG 功能出现问题?

【问题讨论】:

虽然这似乎是一个有效的问题,但这与编程无关,所以我建议关闭并迁移到 ServerFault。 Libpng-1.6.12 应该是 ABI 与 1.6.6 兼容,因此链接失败可能有其他解释。 格伦我也是这么想的。感谢您的调查。 【参考方案1】:

对于那些来这里有相同症状的人(PHP 在 Yosemite 下,GD Lib 处于活动状态但缺少 PNG 支持)但使用 OS X 附带的 Apache 和 PHP(而不是 MAMP)的人来说,这是一个答案。

在这种情况下,问题的原因是 Yosemite 的 PHP 没有编译 PNG 和 FreeType 支持。

这里描述了这种情况下的解决方案:https://***.com/a/26505558/430742

【讨论】:

【参考方案2】:

根据您发布的屏幕截图,问题不只是 PNG。您包含的 phpinfo() 浏览器输出显示 FreeType、T1Lib、XBM 和 PNG 都已启用且可用,而 PHP 脚本结果的命令行屏幕截图显示这些都不可用。

因此,您遇到的问题很可能源于在两种情况下使用两种不同的 PHP 安装:一种通过浏览器上的 MAMP,另一种可能来自命令行上的本地安装。请通过 MAMP/浏览器运行您的脚本,以确保您得到相同的 PNG 错误。

通过运行命令检查正在使用的 PHP 二进制文件:

which php

如果它在 /etc 中列出了 PHP 路径或 MAMP 路径以外的任何内容,则您需要在运行命令时显式使用 MAMP PHP 路径。或者,您可以在 .bash_profile 文件中设置别名,方法是添加一行(将 php5.X.X 替换为您拥有的正确版本):

alias php=/Applications/MAMP/bin/php/php5.X.X/bin/php

您也可以尝试删除旧的 PHP bin 文件并创建指向 MAMP PHP bin 的符号链接:

sudo ln -s /Applications/MAMP/bin/php/php5.X.X/bin/php OLDPATH

希望对您有所帮助。

【讨论】:

我猜您所指的第二个 PHP 安装是 Yosemite 附带的本机安装。它的问题是PNG支持没有被编译成ins(见***.com/questions/26443242/…)。

以上是关于PHP GD 库中不支持 PNG,但支持 GIF 和 JPEG。我怎样才能解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

PHP GD库不支持JPEG

PHP图片处理(GD库)

GD库笔记

如何在 Linux 上的 xampp 中的 php GD 库中启用 Webp 支持

错误:需要支持FreeType的GD PHP扩展或支持PNG的ImageMagick PHP扩展

如何改进我的 php 图像调整器以支持 alpha png 和透明 GIF