需求
开发过程中总会遇到一些需求需要对图片格式进行转换。比如 gif转png,jpg转png
如最近使用某平台的图片文件识别,居然不支持gif格式,那么就需要将gif处理成png等。
依赖
php扩展 gd 和 exif
实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
/** * 图片格式转换 * @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 <klinson@163.com> */ 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' ); } } } |
使用
1
2
3
4
5
6
|
// 转换后保存在test.png transform_image( $url , 'png' , './test.png' ); transform_image( $filepath , 'png' , './test.png' ); // 转换后二进制结果直接返回 transform_image( $url , 'png' ); transform_image( $filepath , 'png' ); |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://segmentfault.com/a/1190000020857436