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

Aar*_*ron 31 php upload png exif image

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

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

但是,我希望所有格式,PNG,JPG,JPEG和GIF在提交后最终成为PNG.

我该怎么做呢?

mar*_*rio 85

那你就是需要的imagepng().实际上它几乎变成了一个单行:

 imagepng(imagecreatefromstring(file_get_contents($filename)), "output.png");
Run Code Online (Sandbox Code Playgroud)

您可以使用$_FILES["id"]["tmp_name"]文件名,显然可以使用不同的输出文件名.但探测图像格式本身会变得多余.

  • 这非常有效。我刚刚将 output.png 更改为“uploads/out.png”以移动目录。 (2认同)
  • @issueNo329如果您的输入是JPEG,那么它*已经具有*压缩技术。将其转换为 PNG 不会使这些情况恶化,但压缩效果不佳。(请记住,PNG 适用于实心绘画图形,JPEG 适用于柔软的照片。) (2认同)

Cyc*_*ode 11

根据它是什么类型的图像,您可以选择正确的功能来打开文件:

$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;
}
Run Code Online (Sandbox Code Playgroud)

然后你只需使用以下方法保存文件:

imagepng($image, $new_filename, $quality); 
Run Code Online (Sandbox Code Playgroud)


Zul*_*rul 5

<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';
    }       
}
?>
Run Code Online (Sandbox Code Playgroud)