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

在PHP中将JPG/GIF图像转换为PNG?,php,image,upload,png,exif,Php,Image,Upload,Png,Exif,可能重复的 我有一个PHP表单,允许上传图像并检查exif_imagetype()以确保图像有效 但是,我希望所有格式,PNG、JPG、JPEG和GIF,在提交后都变成PNG 如何进行此操作?非常简单,使用: 为了简洁起见,如果图像已经是PNG,这显然不能处理这种情况。您只需要这样做。事实上,它几乎变成了一行: imagepng(imagecreatefromstring(file_get_contents($filename)), "output.png"); 您可以使用$\u FILE

可能重复的

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

但是,我希望所有格式,PNG、JPG、JPEG和GIF,在提交后都变成PNG

如何进行此操作?

非常简单,使用:

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

您只需要这样做。事实上,它几乎变成了一行:

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

您可以使用
$\u FILES[“id”][“tmp\u name”]
作为文件名,并使用不同的输出文件名。但是图像格式探测本身将变得多余。

根据图像的类型,您可以选择正确的函数来打开文件:

$extension = strtolower(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, $quality);
可能值得注意的是,这只会解析实际扩展名,而不会真正验证文件,因此文件是特定格式的。例如,您可以拍摄一张jpg图像,只需将扩展名更改为png即可。 因此,更好的方法是使用
exif\u imagetype()
,它将返回不依赖于实际扩展名的图像类型。


<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';
    }       
}
?>

这可能是一个完美的复制品。我刚刚将output.png改为“uploads/out.png”来移动目录。但我想知道这是否破坏了临时文件?或者我需要运行
imagedestroy()
来删除临时文件吗?在本例中,您不能使用,因为它需要一个句柄(如果使用两行代码,您可以得到这个句柄)。脚本结束时,上传的tempfile将自动删除。如果我将jpg转换为png,图像质量会受到影响吗?我知道gif和png支持相同的颜色类型,但jpg支持更多。@issueNo329如果您的输入是JPEG,那么它已经有了压缩效果。将其转换为PNG不会使这些情况恶化,但不会很好地压缩。(请记住PNG用于实体绘制图形,JPEG用于粘糊糊的照片。)如何将图像转换为.ico文件?格式不正确的UTF-8字符,可能还有错误编码(物理路径和url)。@pankajkumar你在说什么?
<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';
    }       
}
?>