在PHP中将JPG / GIF图像转换为PNG?

可能重复的
使用PHP将jpg图像转换为gif,png和bmp格式

我有一个PHP表单,允许图像上传和检查exif_imagetype(); 确保图像有效。

但是,我希望所有的格式,PNG,JPG,JPEG和GIF,最终被提交PNG。

我怎么能这样做?

你只需要imagepng()然后。 事实上,它几乎成了一个单行的:

  imagepng(imagecreatefromstring(file_get_contents($filename)), "output.png"); 

您将使用$_FILES["id"]["tmp_name"]作为文件名,显然还有一个不同的输出文件名。 但是,图像格式探测本身会变得多余。

基于什么样的图像,你可以select正确的function打开文件:

 $extension = pathinfo($filename, PATHINFO_EXTENSION); switch ($extension) { case 'jpg': case 'jpeg': $image = imagecreatefromjpeg($filename); break; case 'gif': $image = imagecreatefromgif($filename); break; case 'png': $image = imagecreatefrompng($filename); break; } 

然后你只需使用以下命令保存文件:

 imagepng($image, $new_filename); 
 <form method="post" enctype="multipart/form-data"> <input type="file" name="image" /> <input type="submit" name="submit" value="Submit" /> </form> <?php if(isset($_POST['submit'])) { if(exif_imagetype($_FILES['image']['tmp_name']) == IMAGETYPE_GIF) { $newpng = 'image.png'; $png = imagepng(imagecreatefromgif($_FILES['image']['tmp_name']), $newpng); } elseif(exif_imagetype($_FILES['image']['tmp_name']) == IMAGETYPE_JPEG) { $newpng = 'image.png'; $png = imagepng(imagecreatefromjpeg($_FILES['image']['tmp_name']), $newpng); } else //already png { $newpng = 'image.png'; } } ?> 

使用gd函数非常简单:

 switch (exif_imagetype($image)) { case IMAGETYPE_GIF : $img = imagecreatefromgif($image); break; case IMAGETYPE_JPEG : $img = imagecreatefromjpeg($image); break; default : throw new InvalidArgumentException('Invalid image type'); } imagepng($img, $filename); 

为了简洁起见,如果图像已经是PNG,那么显然不能处理这种情况。