首页 文章

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

提问于
浏览
30

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

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

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

我该怎么做呢?

4 回答

  • 10

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

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

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

  • 2

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

    $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);
    
  • 85
    <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';
        }       
    }
    ?>
    
  • 1

    使用gd functions非常简单:

    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,这显然无法处理 .

相关问题