在PHP中,位图法是一种常用的图像处理技术。下面通过一个简单的实例来展示如何使用PHP的位图法实现图像的缩放、旋转和翻转等操作。
1. 图像缩放
以下是一个使用PHP位图法实现图像缩放的示例:

```php
function resizeImage($sourceImage, $width, $height) {
// 获取图像信息
$imageInfo = getimagesize($sourceImage);
$sourceWidth = $imageInfo[0];
$sourceHeight = $imageInfo[1];
$sourceType = $imageInfo[2];
// 创建新图像
switch ($sourceType) {
case IMAGETYPE_JPEG:
$newImage = imagecreatetruecolor($width, $height);
$source = imagecreatefromjpeg($sourceImage);
break;
case IMAGETYPE_PNG:
$newImage = imagecreatetruecolor($width, $height);
$source = imagecreatefrompng($sourceImage);
break;
case IMAGETYPE_GIF:
$newImage = imagecreatetruecolor($width, $height);
$source = imagecreatefromgif($sourceImage);
break;
default:
return false;
}
// 缩放图像
imagecopyresampled($newImage, $source, 0, 0, 0, 0, $width, $height, $sourceWidth, $sourceHeight);
// 输出图像
switch ($sourceType) {
case IMAGETYPE_JPEG:
imagejpeg($newImage, 'resized_image.jpg');
break;
case IMAGETYPE_PNG:
imagepng($newImage, 'resized_image.png');
break;
case IMAGETYPE_GIF:
imagegif($newImage, 'resized_image.gif');
break;
}
// 释放资源
imagedestroy($newImage);
imagedestroy($source);
return true;
}
// 调用函数
resizeImage('source_image.jpg', 200, 200);
>
```
| 操作 | 代码 |
|---|---|
| 获取图像信息 | `getimagesize($sourceImage)` |
| 创建新图像 | `imagecreatetruecolor($width,$height)` |
| 获取源图像 | `imagecreatefromjpeg($sourceImage)`(或其他类型) |
| 缩放图像 | `imagecopyresampled($newImage,$source,0,0,0,0,$width,$height,$sourceWidth,$sourceHeight)` |
| 输出图像 | `imagejpeg($newImage,'resized_image.jpg')`(或其他类型) |
| 释放资源 | `imagedestroy($newImage)`、`imagedestroy($source)` |
2. 图像旋转
以下是一个使用PHP位图法实现图像旋转的示例:
```php
function rotateImage($sourceImage, $angle) {
// 获取图像信息
$imageInfo = getimagesize($sourceImage);
$sourceWidth = $imageInfo[0];
$sourceHeight = $imageInfo[1];
$sourceType = $imageInfo[2];
// 创建新图像
switch ($sourceType) {
case IMAGETYPE_JPEG:
$newImage = imagecreatetruecolor($sourceHeight, $sourceWidth);
$source = imagecreatefromjpeg($sourceImage);
break;
case IMAGETYPE_PNG:
$newImage = imagecreatetruecolor($sourceHeight, $sourceWidth);
$source = imagecreatefrompng($sourceImage);
break;
case IMAGETYPE_GIF:
$newImage = imagecreatetruecolor($sourceHeight, $sourceWidth);
$source = imagecreatefromgif($sourceImage);
break;
default:
return false;
}
// 旋转图像
$newX = ($sourceHeight - ($sourceWidth * sin(deg2rad($angle)))) / 2;
$newY = ($sourceWidth - ($sourceHeight * cos(deg2rad($angle)))) / 2;
$newX1 = $newX + $sourceWidth * cos(deg2rad($angle)) - $sourceHeight * sin(deg2rad($angle));
$newY1 = $newY + $sourceHeight * sin(deg2rad($angle)) + $sourceWidth * cos(deg2rad($angle));
$newX2 = $newX + $sourceWidth * cos(deg2rad($angle)) + $sourceHeight * sin(deg2rad($angle));
$newY2 = $newY - $sourceWidth * sin(deg2rad($angle)) + $sourceHeight * cos(deg2rad($angle));
imagecopyresampled($newImage, $source, 0, 0, ($sourceWidth / 2) - ($newX1 / 2), ($sourceHeight / 2) - ($newY1 / 2), $sourceHeight, $sourceWidth, $newX1, $newY1, $newX2, $newY2);
// 输出图像
switch ($sourceType) {
case IMAGETYPE_JPEG:
imagejpeg($newImage, 'rotated_image.jpg');
break;
case IMAGETYPE_PNG:
imagepng($newImage, 'rotated_image.png');
break;
case IMAGETYPE_GIF:
imagegif($newImage, 'rotated_image.gif');
break;
}
// 释放资源
imagedestroy($newImage);
imagedestroy($source);
return true;
}
// 调用函数
rotateImage('source_image.jpg', 45);
>
```
| 操作 | 代码 |
|---|---|
| 获取图像信息 | `getimagesize($sourceImage)` |
| 创建新图像 | `imagecreatetruecolor($sourceHeight,$sourceWidth)` |
| 获取源图像 | `imagecreatefromjpeg($sourceImage)`(或其他类型) |
| 计算旋转后的坐标 | `$newX`、`$newY`、`$newX1`、`$newY1`、`$newX2`、`$newY2` |
| 缩放图像 | `imagecopyresampled($newImage,$source,0,0,...)` |
| 输出图像 | `imagejpeg($newImage,'rotated_image.jpg')`(或其他类型) |
| 释放资源 | `imagedestroy($newImage)`、`imagedestroy($source)` |
3. 图像翻转
以下是一个使用PHP位图法实现图像翻转的示例:
```php
function flipImage($sourceImage) {
// 获取图像信息
$imageInfo = getimagesize($sourceImage);
$sourceWidth = $imageInfo[0];
$sourceHeight = $imageInfo[1];
$sourceType = $imageInfo[2];
// 创建新图像
switch ($sourceType) {
case IMAGETYPE_JPEG:
$newImage = imagecreatetruecolor($sourceWidth, $sourceHeight);
$source = imagecreatefromjpeg($sourceImage);
break;
case IMAGETYPE_PNG:
$newImage = imagecreatetruecolor($sourceWidth, $sourceHeight);
$source = imagecreatefrompng($sourceImage);
break;
case IMAGETYPE_GIF:
$newImage = imagecreatetruecolor($sourceWidth, $sourceHeight);
$source = imagecreatefromgif($sourceImage);
break;
default:
return false;
}
// 翻转图像
for ($i = 0; $i < $sourceWidth; $i++) {
for ($j = 0; $j < $sourceHeight; $j++) {
$color = imagecolorat($source, $i, $j);
imagesetpixel($newImage, $i, $j, $color);
}
}
// 输出图像
switch ($sourceType) {
case IMAGETYPE_JPEG:
imagejpeg($newImage, 'flipped_image.jpg');
break;
case IMAGETYPE_PNG:
imagepng($newImage, 'flipped_image.png');
break;
case IMAGETYPE_GIF:
imagegif($newImage, 'flipped_image.gif');
break;
}
// 释放资源
imagedestroy($newImage);
imagedestroy($source);
return true;
}
// 调用函数
flipImage('source_image.jpg');
>
```
| 操作 | 代码 |
|---|---|
| 获取图像信息 | `getimagesize($sourceImage)` |
| 创建新图像 | `imagecreatetruecolor($sourceWidth,$sourceHeight)` |
| 获取源图像 | `imagecreatefromjpeg($sourceImage)`(或其他类型) |
| 翻转图像 | `for($i=0;$i<$sourceWidth;$i++){...}` |
| 输出图像 | `imagejpeg($newImage,'flipped_image.jpg')`(或其他类型) |
| 释放资源 | `imagedestroy($newImage)`、`imagedestroy($source)` |









