在 PHP 中将 JPG/GIF 图像转换为 PNG?
Posted
技术标签:
【中文标题】在 PHP 中将 JPG/GIF 图像转换为 PNG?【英文标题】:Convert JPG/GIF image to PNG in PHP? 【发布时间】:2012-01-22 21:58:04 【问题描述】:可能重复Convert jpg image to gif, png & bmp format using php
我有一个 PHP 表单,允许上传图片并检查 exif_imagetype();
以确保图片有效。
但是,我希望所有格式(PNG、JPG、JPEG 和 GIF)在提交后最终都是 PNG。
我该怎么做?
【问题讨论】:
***.com/questions/755781/… Convert jpg image to gif, png & bmp format using PHP的可能重复 【参考方案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,这显然不能处理这种情况。
【讨论】:
【参考方案2】:那么你只需要imagepng()
。事实上,它几乎变成了一条线:
imagepng(imagecreatefromstring(file_get_contents($filename)), "output.png");
您将使用$_FILES["id"]["tmp_name"]
作为文件名,并且显然使用不同的输出文件名。但是图像格式探测本身就会变得多余。
【讨论】:
这非常有效。我只是将 output.png 更改为“uploads/out.png”来移动目录。 但我想知道这是否破坏了临时文件?还是我需要运行imagedestroy()
来删除临时文件?
在这个例子中,你不能使用imagedestroy
,因为它需要一个句柄(如果你使用两行代码就可以得到)。脚本结束时,上传的临时文件将自动删除。
如果我将 jpg 转换为 png,图像质量会受到影响吗?我知道 gif 和 png 支持相同的颜色类型,但 jpg 支持更多。
@issueNo329 如果您的输入是 JPEG,那么它已经有 压缩工件。将其转换为 PNG 不会使这些恶化,但不会很好地压缩。 (请记住,PNG 用于纯色图形,JPEG 用于柔软的照片。)【参考方案3】:
你可以根据图片的类型选择正确的函数来打开文件:
$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()
,它将返回图像的类型,而不取决于实际的扩展名。
【讨论】:
图片转换成.ico文件怎么样? 格式错误的 UTF-8 字符,可能是我得到的错误编码错误(物理路径和 url)。 @pankajkumar 你在说什么?【参考方案4】:<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';
?>
【讨论】:
以上是关于在 PHP 中将 JPG/GIF 图像转换为 PNG?的主要内容,如果未能解决你的问题,请参考以下文章
将不同的图片格式(jpg、gif、png等)转换为TIFF格式
如何在 PHP 中将图像从 base 64 转换为它们的文件类型?
在 Python 3.9.6 中将 b 字符串转换为 png