这篇文章主要介绍了php图像处理类,涉及php操作图片的大小修改、加水
本文实例讲述了php图像处理类。分享给大家供大家参考。具体如下:
fileName = $fileName;
if ($this->fileName) {
$this->getSrcImageInfo();
}
}
/**
* 取源图像信息
* @access private
* @return void
*/
private function getSrcImageInfo() {
$info = $this->getImageInfo();
$this->imageWidth = $info[0];
$this->imageHeight = $info[1];
$this->imageType = $info[2];
$this->width = $info[0];
$this->height = $info[1];
$this->type = $info[2];
}
/**
* 取图像信息
* @param string $fileName 文件名
* @access private
* @return array
*/
private function getImageInfo($fileName = NULL) {
if ($fileName==NULL) {
$fileName = $this->fileName;
}
$info = getimagesize($fileName);
return $info;
}
/**
* 创建源图像GD 资源
* @access private
* @return void
*/
private function createSrcImage () {
$this->imageResource = $this->createImageFromFile();
}
/**
* 跟据文件创建图像GD 资源
* @param string $fileName 文件名
* @return gd resource
*/
public function createImageFromFile($fileName = NULL)
{
if (!$fileName) {
$fileName = $this->fileName;
$imgType = $this->imageType;
}
if (!is_readable($fileName) || !file_exists($fileName)) {
throw new Exception('Unable to open file "' . $fileName . '"');
}
if (!$imgType) {
$imageInfo = $this->getImageInfo($fileName);
$imgType = $imageInfo[2];
}
switch ($imgType) {
case IMAGETYPE_GIF:
$tempResource = imagecreatefromgif($fileName);
break;
case IMAGETYPE_JPEG:
$tempResource = imagecreatefromjpeg($fileName);
break;
case IMAGETYPE_PNG:
$tempResource = imagecreatefrompng($fileName);
break;
case IMAGETYPE_WBMP:
$tempResource = imagecreatefromwbmp($fileName);
break;
case IMAGETYPE_XBM:
$tempResource = imagecreatefromxbm($fileName);
break;
default:
throw new Exception('Unsupport image type');
}
return $tempResource;
}
/**
* 改变图像大小
* @param int $width 宽
* @param int $height 高
* @param string $flag 一般而言,允许截图则用4,不允许截图则用1; 假设要求一个为4:3比例的图像,则:4=如果太长则自动刪除一部分 0=长宽转换成参数指定的 1=按比例缩放,自动判断太长还是太宽,长宽约束在参数指定内 2=以宽为约束缩放 3=以高为约束缩放
* @param string $bgcolor 如果不为null,则用这个参数指定的颜色作为背景色,并且图像扩充到指定高宽,该参数应该是一个数组;
* @return string
*/
public function resizeImage($width, $height, $flag=1, $bgcolor=null) {
$widthRatio = $width/$this->imageWidth;
$heightRatio = $height/$this->imageHeight;
switch ($flag) {
case 1:
if ($this->imageHeight imageWidth imageWidth;
$endHeight = $this->imageHeight;
//return;
} elseif (($this->imageHeight * $widthRatio)>$height) {
$endWidth = ceil($this->imageWidth * $heightRatio);
$endHeight = $height;
} else {
$endWidth = $width;
$endHeight = ceil($this->imageHeight * $widthRatio);
}
break;
case 2:
$endWidth = $width;
$endHeight = ceil($this->imageHeight * $widthRatio);
break;
case 3:
$endWidth = ceil($this->imageWidth * $heightRatio);
$endHeight = $height;
break;
case 4:
$endWidth2 = $width;
$endHeight2 = $height;
if ($this->imageHeight imageWidth imageWidth;
$endHeight = $this->imageHeight;
//return;
} elseif (($this->imageHeight * $widthRatio)imageWidth * $heightRatio);
$endHeight = $height;
} else {
$endWidth = $width;
$endHeight = ceil($this->imageHeight * $widthRatio);
}
break;
default:
$endWidth = $width;
$endHeight = $height;
break;
}
if ($this->imageResource==NULL) {
$this->createSrcImage();
}
if($bgcolor){
$this->newResource = imagecreatetruecolor($width,$height);
$bg=ImageColorAllocate($this->newResource,$bgcolor[0],$bgcolor[1],$bgcolor[2]);
ImageFilledRectangle($this->newResource,0,0,$width,$height,$bg);
$tox=ceil(($width-$endWidth)/2);
$toy=ceil(($height-$endHeight)/2);
if($toxnewResource = imagecreatetruecolor($endWidth2,$endHeight2);
}else {
$this->newResource = imagecreatetruecolor($endWidth,$endHeight);
}
$this->newResType = $this->imageType;
imagecopyresampled($this->newResource, $this->imageResource, $tox, $toy, 0, 0, $endWidth, $endHeight,$this->imageWidth,$this->imageHeight);
}
/**
* 给图像加水印
* @param string $waterContent 水印内容可以是图像文件名,也可以是文字
* @param int $pos 位置0-9可以是数组
* @param int $textFont 字体大字,当水印内容是文字时有效
* @param string $textColor 文字颜色,当水印内容是文字时有效
* @return string
*/
public function waterMark($waterContent, $pos = 0, $textFont=5, $textColor="#ffffff") {
$isWaterImage = file_exists($waterContent);
if ($isWaterImage) {
$waterImgRes = $this->createImageFromFile($waterContent);
$waterImgInfo = $this->getImageInfo($waterContent);
$waterWidth = $waterImgInfo[0];
$waterHeight = $waterImgInfo[1];
} else {
$waterText = $waterContent;
//$temp = @imagettfbbox(ceil($textFont*2.5),0,"./cour.ttf",$waterContent);
if ($temp) {
$waterWidth = $temp[2]-$temp[6];
$waterHeight = $temp[3]-$temp[7];
} else {
$waterWidth = 100;
$waterHeight = 12;
}
}
if ($this->imageResource==NULL) {
$this->createSrcImage();
}
switch($pos)
{
case 0://随机
$posX = rand(0,($this->imageWidth - $waterWidth));
$posY = rand(0,($this->imageHeight - $waterHeight));
break;
case 1://1为顶端居左
$posX = 0;
$posY = 0;
break;
case 2://2为顶端居中
$posX = ($this->imageWidth - $waterWidth) / 2;
$posY = 0;
break;
case 3://3为顶端居右
$posX = $this->imageWidth - $waterWidth;
$posY = 0;
break;
case 4://4为中部居左
$posX = 0;
$posY = ($this->imageHeight - $waterHeight) / 2;
break;
case 5://5为中部居中
$posX = ($this->imageWidth - $waterWidth) / 2;
$posY = ($this->imageHeight - $waterHeight) / 2;
break;
case 6://6为中部居右
$posX = $this->imageWidth - $waterWidth;
$posY = ($this->imageHeight - $waterHeight) / 2;
break;
case 7://7为底端居左
$posX = 0;
$posY = $this->imageHeight - $waterHeight;
break;
case 8://8为底端居中
$posX = ($this->imageWidth - $waterWidth) / 2;
$posY = $this->imageHeight - $waterHeight;
break;
case 9://9为底端居右
$posX = $this->imageWidth - $waterWidth-20;
$posY = $this->imageHeight - $waterHeight-10;
break;
default://随机
$posX = rand(0,($this->imageWidth - $waterWidth));
$posY = rand(0,($this->imageHeight - $waterHeight));
break;
}
imagealphablending($this->imageResource, true);
if($isWaterImage) {
imagecopy($this->imageResource, $waterImgRes, $posX, $posY, 0, 0, $waterWidth,$waterHeight);
} else {
$R = hexdec(substr($textColor,1,2));
$G = hexdec(substr($textColor,3,2));
$B = hexdec(substr($textColor,5));
$textColor = imagecolorallocate($this->imageResource, $R, $G, $B);
imagestring ($this->imageResource, $textFont, $posX, $posY, $waterText, $textColor);
}
$this->newResource = $this->imageResource;
$this->newResType = $this->imageType;
}
/**
* 生成验证码图片
* @param int $width 宽
* @param string $height 高
* @param int $length 长度
* @param int $validType 0=数字,1=字母,2=数字加字母
* @param string $textColor 文字颜色
* @param string $backgroundColor 背景颜色
* @return void
*/
public function imageValidate($width, $height, $length = 4, $validType = 1, $textColor = '#000000', $backgroundColor = '#ffffff') {
if ($validType==1) {
$validString = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$validLength = 52;
} elseif ($validType==2) {
$validString = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$validLength = 62;
} else {
$validString = '123456789';
$validLength = 9;
}
srand((int)time());
$valid = '';
for ($i=0; $inewResource = imagecreate($width,$height);
$bgR = hexdec(substr($backgroundColor,1,2));
$bgG = hexdec(substr($backgroundColor,3,2));
$bgB = hexdec(substr($backgroundColor,5,2));
$backgroundColor = imagecolorallocate($this->newResource, $bgR, $bgG, $bgB);
$tR = hexdec(substr($textColor,1,2));
$tG = hexdec(substr($textColor,3,2));
$tB = hexdec(substr($textColor,5,2));
$textColor = imagecolorallocate($this->newResource, $tR, $tG, $tB);
for ($i=0;$i
希望本文所述对大家的php程序设计有所帮助。
,
핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
