标签: 图像处理

  • PHP 图片压缩、图片缩放

    使用 PHP 进行图片压缩,首先通过 imagecreatefrom* 系列函数创建源图像 resource 对象,再通过 imagecreate 或者 imagecreatetruecolor 函数创建确定宽度和高度的目标图像对象,接着进行一系列处理,最后通过 imagecopy* 系列函数把源图像对象拷贝到目标图像对象。完成上述处理之后,调用 imagegif、imagejpeg、imagepng 把目标图像对象转换为图像字符串输出到文件或者浏览器。似乎没有直接把图像对象转换为字符串的函数?可以通过 ob_start 捕获字符串输出,并调用 ob_get_clean 取得字符串。

    imagecreatefrom* 系列函数

    imagecreatefromgd 从 GD 文件或 URL 创建图像对象
    imagecreatefromgd2 从 GD2 文件或 URL 创建图像对象
    imagecreatefromgif 从 gif 文件创建图像对象
    imagecreatefromjpeg 从 jpeg/jpg 文件创建图像对象
    imagecreatefrompng 从 png 文件创建图像对象
    imagecreatefromwbmp 从 wbmp 文件创建图像对象
    imagecreatefromwebp 从 webp 文件创建图像对象
    imagecreatefromxbm 从 xbm 文件创建图像对象
    imagecreatefromxpm 从 xpm 文件创建图像对象
    上述所有函数全部接收一个参数 — $filename, 失败时均会返回 false
    imagecreatefromstring 从字符串创建图像对象
    接收一个参数 — 图像二进制字符串

    imagecopy* 系列函数

    imagecopy 拷贝图像的一部分
    imagecopymerge 拷贝并合并图像的一部分
    imagecopymergegray 用灰度拷贝并合并图像的一部分
    imagecopyresampled 重采样拷贝部分图像并调整大小
    imagecopyresized 拷贝部分图像并调整大小

    图片压缩实现代码

    $image = 'D:\TEMP\woxinfeishi-bukezhuanye.jpg';
    $source = imagecreatefromjpeg($image);
    
    $s_width = imagesx($source);
    $s_height = imagesy($source);
    
    $max_width = 200;
    $max_height = 200;
    
    if ($s_width > $max_width
    	|| $s_height > $max_height)
    {
    	$s_rate = $s_width / $s_height;
    	$t_rate = $max_width / $max_height;
    
    	if ($s_rate > $t_rate)
    	{
    		$t_width = $max_width;
    		$t_height = floor($t_width / $s_rate);
    	}
    	else
    	{
    		$t_height = $max_height;
    		$t_width = floor($t_height * $s_rate);
    	}
    
    	$target = imagecreatetruecolor($t_width,
    		$t_height);
    	imagecopyresampled($target, $source, 0, 0, 0, 0,
    		$t_width, $t_height,
    		$s_width, $s_height);
    }
    else
    {
    	$target = $source;
    }
    
    ob_start();
    imagejpeg($target);
    $image_data = ob_get_clean(); // 图像数据
    imagedestroy($source);
    imagedestroy($target);
    

    上述代码实现图片等比压缩,如果是缩放到固定高宽则只需要直接设置为最终高宽。