在PHP中将BMP转换为JPG

时间:2011-07-31 12:43:00

标签: php image gd

在我正在开发的网站中,我需要能够通过imagejpeg()传递我的所有图像,因此我决定(因为我的网站只接受JPG,BMP + PNG上传)以简单地将BMP和PNG转换为JPG第一

现在要转换BMP我用过这里的脚本: http://forums.codewalkers.com/php-coding-7/how-to-convert-bmp-to-jpg-879135.html

当我通过普通的BMP时,脚本运行正常。

现在,我有一个PNG,我通过imagecreatefrompng()进行转换时遇到了问题,过了一段时间我意识到它有mime-type image / x-ms-bmp ....

我尝试通过BMP脚本传递图像,但是我收到以下错误:

  

警告:imagecreatefromgd()[function.imagecreatefromgd]:'C:\ Users \ Tom \ AppData \ Local \ Temp \ GD50C1.tmp'不是C:\ xampp \ htdocs \ test \ cropimage \中的有效GD文件第10行的FCreateImageFromBMP.php

如果有人在此之前遇到过这种情况,请提供帮助。 如果您需要查看任何代码,请告诉我。

先谢谢,汤姆。

编辑: 可能有用的是,发生错误的行(从上面的链接开始)就是这个:

$tmp_name = tempnam("/tmp", "GD");

1 个答案:

答案 0 :(得分:1)

如果一些先决条件失败,您链接的代码就会失效:

if(!($src_f = fopen($src, "rb"))) { 
...
if(!($dest_f = fopen($dest, "wb"))) { 
...
if($type != 0x4D42) { // signature "BM" 

因此假设源文件和tmp文件是可读/写的,看起来你给它的文件(以.png格式发送但是给出了BMP mime类型)实际上也不是BMP文件,因为文件内容不以“BM”标识符开头。如果您附加文件,也许有人可以确定它到底是什么。

我用来解决这个问题的另一个解决方案是使用ImageMagick的convert命令将大多数文件类型转换为所需的格式:

// convert uses the file extension to determine the output format, so
// change .jpg to whatever you'd like
$tmp_name = tempnam("/tmp", "convert") . '.jpg';
exec('c:\path\to\imagemagick\convert ' . $inputFile . ' ' . $tmp_name);

您可以在此处获取适用于Windows和其他平台的ImageMagick: http://www.imagemagick.org/script/binary-releases.php