繁体   English   中英

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

[英]Convert JPG/GIF image to PNG in PHP?

可能重复
使用 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"]作为文件名,显然使用不同的输出文件名。 但是图像格式探测本身将变得多余。

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

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

使用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,这显然不能处理这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM