Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中将BMP转换为JPG_Php_Image_Gd - Fatal编程技术网

在PHP中将BMP转换为JPG

在PHP中将BMP转换为JPG,php,image,gd,Php,Image,Gd,在我正在开发的站点中,我需要能够通过imagejpeg()传递所有图像,因此我决定(因为我的站点只接受JPG、BMP+PNG上传),首先简单地将BMP和PNG转换为JPG 现在,为了转换BMP,我使用了以下脚本: 当我通过一个普通的BMP时,脚本工作正常 现在,我有一个PNG,我在通过imagecreatefrompng()转换时遇到问题,过了一会儿我意识到它有mime类型image/x-ms-bmp 我尝试通过BMP脚本传递图像,但出现以下错误: 警告:imagecreatefromgd()

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

现在,为了转换BMP,我使用了以下脚本:

当我通过一个普通的BMP时,脚本工作正常

现在,我有一个PNG,我在通过imagecreatefrompng()转换时遇到问题,过了一会儿我意识到它有mime类型image/x-ms-bmp

我尝试通过BMP脚本传递图像,但出现以下错误:

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

如果以前有人来过这里,请帮忙。 如果您需要查看任何代码,请告诉我

事先谢谢你,汤姆

编辑: 值得一提的是,发生错误的那一行(如上链接所示)是这一行:

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

如果几个先决条件失败,您链接到的代码将退出:

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: