欢迎访问宙启技术站
智能推送

PHP中如何处理和操作图片

发布时间:2023-06-12 15:54:07

1. 图片格式的转换

在PHP中,我们可以使用imagecreatefromjpeg()、imagecreatefromgif()和imagecreatefrompng()函数来读取不同格式的图片文件。这些函数返回一个代表图像的资源句柄,可以使用该句柄进行进一步操作。

如果需要将图像转换成其他格式,可以使用imagejpeg()、imagegif()和imagepng()函数将图像输出到浏览器或文件,也可以使用imagecopyresampled()将原始图像复制到一个新图像并调整大小,然后输出到目标格式。

比如,下面的代码将一个JPG格式的图片转换为PNG格式并输出到浏览器中:

// 读取JPG格式的图片文件
$srcImage = imagecreatefromjpeg('example.jpg');

// 创建一个新的PNG格式图片
$dstImage = imagecreatetruecolor(imagesx($srcImage), imagesy($srcImage));
imagealphablending($dstImage, false);
imagesavealpha($dstImage, true);

// 复制并调整尺寸
imagecopyresampled($dstImage, $srcImage, 0, 0, 0, 0, imagesx($srcImage), imagesy($srcImage), imagesx($srcImage), imagesy($srcImage));

// 将图片输出到浏览器
header('Content-Type: image/png');
imagepng($dstImage);

// 释放资源
imagedestroy($srcImage);
imagedestroy($dstImage);

2. 图片缩放和裁剪

缩放和裁剪是图片操作的两个基本需求。

缩放可以使用imagecopyresized()或imagecopyresampled()函数完成。两个函数的区别在于前者会采用简单的插值算法进行缩放,而后者则采用更复杂的算法来提高缩放质量,但也会增加系统开销。

例如,下面的代码将一个图片缩放为宽度为400像素,高度按比例缩放:

// 读取原始图片
$srcImage = imagecreatefromjpeg('example.jpg');

// 计算目标尺寸
$dstWidth = 400;
$dstHeight = floor(imagesy($srcImage) * ($dstWidth / imagesx($srcImage)));

// 创建目标图片
$dstImage = imagecreatetruecolor($dstWidth, $dstHeight);

// 缩放图片
imagecopyresampled($dstImage, $srcImage, 0, 0, 0, 0, $dstWidth, $dstHeight, imagesx($srcImage), imagesy($srcImage));

// 输出结果
header('Content-Type: image/jpeg');
imagejpeg($dstImage);

// 释放资源
imagedestroy($srcImage);
imagedestroy($dstImage);

裁剪可以使用imagecopy()或imagecopyresampled()函数完成。两者的区别在于前者会直接复制图像的一部分到目标位置,而后者则会复制并调整尺寸以填满整个目标区域。

例如,下面的代码将一个图片裁剪成中心的400x400像素:

// 读取原始图片
$srcImage = imagecreatefromjpeg('example.jpg');

// 计算目标尺寸
$dstWidth = $dstHeight = 400;

// 创建目标图片
$dstImage = imagecreatetruecolor($dstWidth, $dstHeight);

// 计算源图像的应该复制的位置
$srcX = floor((imagesx($srcImage) - $dstWidth) / 2);
$srcY = floor((imagesy($srcImage) - $dstHeight) / 2);

// 裁剪图片
imagecopy($dstImage, $srcImage, 0, 0, $srcX, $srcY, $dstWidth, $dstHeight);

// 输出结果
header('Content-Type: image/jpeg');
imagejpeg($dstImage);

// 释放资源
imagedestroy($srcImage);
imagedestroy($dstImage);

3. 图片旋转和翻转

旋转和翻转是常见的图片操作,可以通过使用imagecopyrotate()和imageflip()函数来实现。

imagecopyrotate()函数可以将一个图像旋转一定角度,可以指定旋转中心和背景颜色。

例如,下面的代码将一个图片逆时针旋转45度:

// 读取原始图片
$srcImage = imagecreatefromjpeg('example.jpg');

// 计算旋转后的尺寸
$dstWidth = ceil(imagesx($srcImage) * sqrt(2));
$dstHeight = ceil(imagesy($srcImage) * sqrt(2));

// 创建目标图片
$dstImage = imagecreatetruecolor($dstWidth, $dstHeight);

// 设置旋转背景颜色
$bgColor = imagecolorallocate($dstImage, 255, 255, 255);

// 旋转图片
imagecopyrotate($dstImage, $srcImage, $dstWidth / 2, $dstHeight / 2, 0, 0, imagesx($srcImage), imagesy($srcImage), 45, $bgColor);

// 输出结果
header('Content-Type: image/jpeg');
imagejpeg($dstImage);

// 释放资源
imagedestroy($srcImage);
imagedestroy($dstImage);

imageflip()函数可以将一个图像水平或垂直翻转。

例如,下面的代码将一个图片垂直翻转:

// 读取原始图片
$srcImage = imagecreatefromjpeg('example.jpg');

// 创建目标图片
$dstImage = imagecreatetruecolor(imagesx($srcImage), imagesy($srcImage));

// 垂直翻转图片
imageflip($dstImage, IMG_FLIP_VERTICAL);

// 输出结果
header('Content-Type: image/jpeg');
imagejpeg($dstImage);

// 释放资源
imagedestroy($srcImage);
imagedestroy($dstImage);

4. 图片水印和文字

水印和文字可以为图片带来更多的信息,可以使用imagecopy()、imagecopymerge()和imagettftext()函数将它们添加到图片上。

imagecopy()函数可以将一个图像复制到另一个图像上,并指定复制位置和透明度。

例如,下面的代码在一个图片的左上角添加一个Logo:

// 读取原始图片和Logo
$srcImage = imagecreatefromjpeg('example.jpg');
$logoImage = imagecreatefrompng('logo.png');

// 复制Logo
imagecopy($srcImage, $logoImage, 10, 10, 0, 0, imagesx($logoImage), imagesy($logoImage));

// 输出结果
header('Content-Type: image/jpeg');
imagejpeg($srcImage);

// 释放资源
imagedestroy($srcImage);
imagedestroy($logoImage);

imagecopymerge()函数可以将一个图像复制到另一个图像上,并指定透明度。这个函数适合将一个透明的水印合并到一个图像上。

例如,下面的代码将一个透明度为50%的水印添加到一个图片上:

// 读取原始图片和水印图
$srcImage = imagecreatefromjpeg('example.jpg');
$watermarkImage = imagecreatefrompng('watermark.png');

// 合并水印
imagecopymerge($srcImage, $watermarkImage, 10, 10, 0, 0, imagesx($watermarkImage), imagesy($watermarkImage), 50);

// 输出结果
header('Content-Type: image/jpeg');
imagejpeg($srcImage);

// 释放资源
imagedestroy($srcImage);
imagedestroy($watermarkImage);

imagettftext()函数可以在图像上绘制文本,可以指定字体、大小、颜色和位置等属性。

例如,下面的代码在一个图片的中心添加一个带阴影的文本:

`

// 读取原始图片

$srcImage = imagecreatefromjpeg('example.jpg');

// 设置字体路径

$fontFile = 'arial.ttf';

// 设置字体大小

$fontSize = 20;

// 设置文本

$text = 'Hello world!';

// 设置阴影颜色和位置

$shadowColor = imagecolorallocate($srcImage, 255, 255,