PHP将图片转换为png格式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="../js/jquery.min.js"></script>
</head>
<body>
<form action="test.php" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" name="submit"/>
<input type="button" value="清空" onclick="window.location.href='test.php'"/>
<br/>
<?php
$url = $_GET['url'];
if(!empty($url)&& file_exists('test/'.$url)){
echo "<a href='test/$url' download='$url' title='仅支持谷歌下载'>$url</a>";
}
?>
</form>
</body>
</html>
<?php
if(!empty($_FILES['file'])){
// 存储原始图片
require_once('function/uploadUtil.php');
$upload = new upload();
$upload->uploadPath = 'test/tmp';
$arr = $upload->uploadFile();
// 格式转换
$image_path = 'test/tmp/'.$arr['msg'];
$save_path = substr($arr['msg1'], 0, strpos($arr['msg1'], ".")) . '.png';
if (preg_match("/[\x7f-\xff]/", $save_path)) {
//路径中有中文
$save_path = substr($arr['msg'], 0, strpos($arr['msg'], ".")) . '.png';
}
transform_image($image_path, 'png', 'test/' . $save_path);
// 删除旧图片
@unlink('test/tmp/'.$arr['msg']);
$save_path = htmlspecialchars ($save_path);
echo "<script>window.location.href='test.php?url=$save_path'</script>";
}
/**
* 图片格式转换 https://www.php.cn/php-ask-458661.html
* @param string $image_path 文件路径或url
* @param string $to_ext 待转格式,支持png,gif,jpeg,wbmp,webp,xbm
* @param null|string $save_path 存储路径,null则返回二进制内容,string则返回true|false
* @return boolean|string $save_path是null则返回二进制内容,是string则返回true|false
* @throws Exception
* @author klinson
*/
function transform_image($image_path, $to_ext = 'png', $save_path = null)
{
if (! in_array($to_ext, ['png', 'gif', 'jpeg', 'wbmp', 'webp', 'xbm'])) {
throw new \Exception('unsupport transform image to ' . $to_ext);
}
switch (exif_imagetype($image_path)) {
case IMAGETYPE_GIF :
$img = imagecreatefromgif($image_path);
break;
case IMAGETYPE_JPEG :
case IMAGETYPE_JPEG2000:
$img = imagecreatefromjpeg($image_path);
break;
case IMAGETYPE_PNG:
$img = imagecreatefrompng($image_path);
break;
case IMAGETYPE_BMP:
case IMAGETYPE_WBMP:
$img = imagecreatefromwbmp($image_path);
break;
case IMAGETYPE_XBM:
$img = imagecreatefromxbm($image_path);
break;
case IMAGETYPE_WEBP: //(从 PHP 7.1.0 开始支持)
$img = imagecreatefromwebp($image_path);
break;
default :
throw new \Exception('Invalid image type');
}
$function = 'image'.$to_ext;
if ($save_path) {
return $function($img, $save_path);
} else {
$tmp = __DIR__.'/'.uniqid().'.'.$to_ext;
if ($function($img, $tmp)) {
$content = file_get_contents($tmp);
unlink($tmp);
return $content;
} else {
unlink($tmp);
throw new \Exception('the file '.$tmp.' can not write');
}
}
}
?>