图片的裁剪缩放、加水印是在项目经常需要实现的功能,使用php实现这类功能非常简单。
图片处理,实现真实图片的资源转化
从指定的图片文件或 URL地址来新建一个图像。成功则返回一个图像标识符,失败时返回一个空字符串,并且输出一条错误信息。
resource imagecreatefrompng ( string filename )
从 PNG 文件或 URL 新建一图像
resource imagecreatefromjpeg ( string filename )
从 JPEG 文件或 URL 新建一图像
resource imagecreatefromgif ( string filename )
从 GIF 文件或 URL 新建一图像
resource imagecreatefromwbmp ( string filename )
从 WBMP 文件或 URL 新建一图像
以上函数的意义是将一个真实的图片转化为一个图片资源,然后可以利用php对图片资源的处理函数,实现很多操作。
$im = imagecreatefromjpeg('img/1.jpg'); $color = imagecolorallocate($im, 225,0,0); imageline($im, 30,30,100,100,$color); header('content-type:image/jpeg'); imagejpeg($im); imagedestroy($im);
图片裁剪缩放大小
图像处理函数:
int imagesx ( resource image ) 取得图像宽度
int imagesy ( resource image ) 取得图像高度
array getimagesize ( string $filename [, array &$imageinfo ] ) 取得图像大小、类型等信息
bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
重采样拷贝部分图像并调整大小,是将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。成功时返回 TRUE, 或者在失败时返回 FALSE。其中dst_image 和 src_image 分别是目标图像和源图像的标识符。
以下代码可以实现图片缩小50%:
$pic = 'img/1.jpg'; $pre = 0.5; $im = imagecreatefromjpeg($pic); $width = imagesx($im); $height = imagesy($im); $width_n = $width * $pre; $height_n = $height * $pre; $im_n = imagecreatetruecolor($width_n,$height_n); imagecopyresampled($im_n, $im, 0,0,0,0, $width_n, $height_n, $width, $height); header("content-type: image/jpeg"); imagejpeg($im_n); imagedestroy($im); imagedestroy($im_n);
图片添加水印
bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )
拷贝图像的一部分(也就是图片合成)。
将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。
$watermark = 'img/w.png'; $pic = 'img/2.jpg'; list($width_w,$height_w) = getimagesize($watermark); //获取水印图片的宽高 list($width_p,$height_p) = getimagesize($pic); //获取目标图片的宽高 $im_w = imagecreatefrompng($watermark); $im_p = imagecreatefromjpeg($pic); $pic_x = $width_p - $width_w; $pic_y = $height_p - $height_w; imagecopy($im_p, $im_w, $pic_x, $pic_y, 0, 0, $width_w, $height_w); header('content-type: image/jpeg'); imagejpeg($im_p); imagedestroy($im_p); imagedestroy($im_w);
图片的旋转和翻转
resource imagerotate ( resource $src_im , float $angle , int $bgd_color [, int $ignore_transparent ] )
用给定角度旋转图像
将 src_im 图像用给定的 angle 角度旋转。bgd_color 指定了旋转后没有覆盖到的部分的颜色。
旋转的中心是图像的中心,旋转后的图像会按比例缩小以适合目标图像的大小——边缘不会被剪去。
如果 ignore_transparent 被设为非零值,则透明色会被忽略(否则会被保留)。