在Web开发中,常常需要将多张图片合成为一张图片来展示。
例如在电商网站的商品详情页中,需要将商品的多张图片拼接在一起展示,此时我们就可以使用PHP的GD库来实现图片合成。
// 创建一张空白画布,大小为400*400像素 $image = imagecreatetruecolor(400, 400); // 在画布上绘制一张图片 $source = imagecreatefromjpeg('path/to/image1.jpg'); imagecopy($image, $source, 0, 0, 0, 0, imagesx($source), imagesy($source)); // 在画布上绘制另一张图片 $source = imagecreatefromjpeg('path/to/image2.jpg'); imagecopy($image, $source, 200, 200, 0, 0, imagesx($source), imagesy($source)); // 将合成的图片保存到文件 imagejpeg($image, 'path/to/combined_image.jpg');
上述代码中,我们先创建了一个空白的画布,然后使用imagecreatefromjpeg函数从文件中创建图片资源,接着使用imagecopy函数将图片粘贴到画布上,并指定图片的位置和大小。最后使用imagejpeg函数将合成的图片保存到文件中。
除了简单的图片合成,我们还可以对图片进行各种操作,例如旋转、缩放、添加水印等。下面是一个添加水印的示例:
// 创建图片资源 $image = imagecreatefromjpeg('path/to/image.jpg'); // 创建水印资源 $watermark = imagecreatefrompng('path/to/watermark.png'); // 获取水印图片大小 $ww = imagesx($watermark); $wh = imagesy($watermark); // 在图片右下角添加水印 imagecopy($image, $watermark, imagesx($image) - $ww, imagesy($image) - $wh, 0, 0, $ww, $wh); // 保存添加水印后的图片 imagejpeg($image, 'path/to/watermarked_image.jpg');
上述代码中,我们首先创建了原始图片资源和水印图片资源,然后获取了水印图片的大小。接着使用imagecopy函数将水印图片粘贴到原始图片的右下角,并指定水印图片的位置和大小。最后保存添加水印后的图片。
在实际应用中,我们常常需要对图片进行批量处理。例如将一组图片缩放到指定大小并添加水印后保存到另一个目录。下面是一个基于循环的批量处理示例:
// 需要处理的图片列表 $images = array('path/to/image1.jpg', 'path/to/image2.jpg', 'path/to/image3.jpg'); // 设置缩放后的图片大小 $width = 400; $height = 300; // 创建水印资源 $watermark = imagecreatefrompng('path/to/watermark.png'); // 循环处理每个图片 foreach ($images as $image) { // 创建图片资源 $source = imagecreatefromjpeg($image); // 缩放图片 $resized = imagecreatetruecolor($width, $height); imagecopyresampled($resized, $source, 0, 0, 0, 0, $width, $height, imagesx($source), imagesy($source)); // 添加水印 imagecopy($resized, $watermark, $width - imagesx($watermark), $height - imagesy($watermark), 0, 0, imagesx($watermark), imagesy($watermark)); // 保存处理后的图片 imagejpeg($resized, 'path/to/resized_' . basename($image)); }
上述代码中,我们首先定义了需要处理的图片列表和缩放后的大小,然后创建了水印资源。在循环中,我们依次打开每张图片,创建缩放后的图片资源,并通过imagecopyresampled函数实现缩放,接着添加水印,最后保存处理后的图片,并以"resized_"为前缀命名新文件。
通过以上示例,我们可以看到使用PHP的GD库进行图片合成和处理非常简单,可以满足大部分常见的图片处理需求。