可能重复使用PHP将jpg图像转换为gif,png和bmp格式
我有一个PHP表单,允许图像上传和检查 exif_imagetype(); 以确保图像有效 .
exif_imagetype();
但是,我希望所有格式,PNG,JPG,JPEG和GIF在提交后最终成为PNG .
我该怎么做呢?
那你只需要imagepng() . 实际上它几乎变成了一个单行:
imagepng(imagecreatefromstring(file_get_contents($filename)), "output.png");
您可以使用 $_FILES["id"]["tmp_name"] 作为文件名,显然可以使用不同的输出文件名 . 但探测图像格式本身会变得多余 .
$_FILES["id"]["tmp_name"]
根据它是什么类型的图像,您可以选择正确的功能来打开文件:
$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 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,这显然无法处理 .
4 回答
那你只需要imagepng() . 实际上它几乎变成了一个单行:
您可以使用
$_FILES["id"]["tmp_name"]
作为文件名,显然可以使用不同的输出文件名 . 但探测图像格式本身会变得多余 .根据它是什么类型的图像,您可以选择正确的功能来打开文件:
然后你只需使用以下方法保存文件:
使用gd functions非常简单:
为简明起见,如果图像已经是PNG,这显然无法处理 .