在PHP中将BMP转换为JPG
在我正在开发的站点中,我需要能够通过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文件 如果以前有人来过这里,请帮忙。 如果您需要查看任何代码,请告诉我 事先谢谢你,汤姆 编辑: 值得一提的是,发生错误的那一行(如上链接所示)是这一行:在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()
$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: