Picture processing function functions: zoom, cut, photo frame, watermark, sharpen, rotate, flip, transparency, invert color, processing and saving history idea: automatically generate a new picture when a picture is changed, naming method You can consider adding steps based on the original picture, for example: picture name + __ which step. In some web applications that require advanced image processing functions, you can refer to this class.
- /*
- Image processing function functions: zoom, cut, photo frame, watermark, sharpen, rotate, flip, transparency, invert color
- The idea of processing and saving history: when there is a picture A new picture is automatically generated when making changes. The naming method can consider adding steps based on the original picture, for example: picture name + __ steps
- */
- class picture
- {
- var $PICTURE_URL;//To be processed Picture
- var $DEST_URL="temp__01.jpg";//Generate the target picture location
- var $PICTURE_CREATE;//The picture to be created
- var $TURE_COLOR;//Create a new true color image
-
- var $PICTURE_WIDTH;// Original picture width
- var $PICTURE_HEIGHT;//Original picture height
-
- /*
- Type of watermark, the default is watermark text
- */
- var $MARK_TYPE=1;
- var $WORD;//After UTF-8 Text
- var $WORD_X; // Text abscissa
- var $WORD_Y; // Text ordinate
- var $FONT_TYPE; // Font type
- var $FONT_SIZE="12"; // Font size
- var $FONT_WORD; // Text
- var $ANGLE=0;//Angle of text, default is 0
- var $FONT_COLOR="#000000";//Color of text
- var $FONT_PATH="font/simkai.ttf";//Font library, default It is Song Dynasty
- var $FORCE_URL;//Watermark image
- var $FORCE_X=0;//Abscissa coordinate of watermark
- var $FORCE_Y=0;//Vertical coordinate of watermark
- var $FORCE_START_X=0;//Cut the horizontal axis of the watermarked image Coordinates
- var $FORCE_START_Y=0;//The vertical coordinate of the picture where the watermark is cut
-
- var $PICTURE_TYPE;//Picture type
- var $PICTURE_MIME;//The output header
-
- /*
- If the scaling ratio is 1, press Zoom height and width zoom
- */
- var $ZOOM=1;//Zoom type
- var $ZOOM_MULTIPLE;//Zoom ratio
- var $ZOOM_WIDTH;//Zoom width
- var $ZOOM_HEIGHT;//Zoom height
-
- /*
- Crop, proportional and fixed length and width
- */
- var $CUT_TYPE=1;//Cut type
- var $CUT_X=0;//Abscissa of cropping
- var $CUT_Y=0;//Crop The ordinate of the cut
- var $CUT_;//The width of the cut
- var $CUT_HEIGHT=100;//The height of the cut
-
- /*
- Sharpening
- */
- var $SHARP="7.0";//Sharp Degree of transformation
-
- /*
- Transparency processing
- */
- var $ALPHA='100';//Transparency is between 0-127
- var $ALPHA_X="90";
- var $ALPHA_Y="50";
-
- /*
- Rotate at any angle
- */
- var $CIRCUMROTATE="90.0";//Note that it must be a floating point number
-
- /*
- Error message
- */
- var $ERROR=array(
- 'unalviable'=> 'No related pictures found!'
- );
-
- /*
- Constructor: function initialization
- */
- function __construct($PICTURE_URL)
- {
- $this->get_info($PICTURE_URL);
- }
-
- function get_info ($PICTURE_URL)
- {
- /*
- Process the information of the original image, first check whether the image exists, if not, the corresponding information will be given
- */
- @$SIZE=getimagesize($PICTURE_URL);
- if(!$SIZE )
- {
- exit($this->ERROR['unalviable']);
- }
-
- //Get the information type, width, and height of the original picture
- $this->PICTURE_MIME=$SIZE['mime'] ;
- $this->PICTURE_;
- $this->PICTURE_HEIGHT=$SIZE[1];
-
- //Create picture
- switch($SIZE[2])
- {
- case 1:
- $this-> PICTURE_CREATE=imagecreatefromgif($PICTURE_URL);
- $this->PICTURE_TYPE="imagejpeg";
- $this->PICTURE_EXT="jpg";
- break;
- case 2:
- $this->PICTURE_CREATE=imagecreatefromjpeg($ PICTURE_URL);
- $this->PICTURE_TYPE="imagegif";
- $this->PICTURE_EXT="gif";
- break;
- case 3:
- $this->PICTURE_CREATE=imagecreatefrompng($PICTURE_URL);
- $ this->PICTURE_TYPE="imagepng";
- $this->PICTURE_EXT="png";
- break;
- }
-
- /*
- Convert text color from hexadecimal to decimal
- */
- preg_match_all(" /([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
- if(count($MATCHES)==3)
- {
- $this->RED= hexdec($MATCHES[0][0]);
- $this->GREEN=hexdec($MATCHES[0][1]);
- $this->BLUE=hexdec($MATCHES[0][2] );
- }
- }
-
- #end of __construct
-
- /*
- Convert hexadecimal color to decimal (R, G, B)
- */
- function hex2dec()
- {
- preg_match_all(" /([0-f]){2,2}/i",$this->FONT_COLOR,$MATCHES);
- if(count($MATCHES)==3)
- {
- $this->RED= hexdec($MATCHES[0][0]);
- $this->GREEN=hexdec($MATCHES[0][1]);
- $this->BLUE=hexdec($MATCHES[0][2] );
- }
- }
-
- //Zoom type
- function zoom_type($ZOOM_TYPE)
- {
- $this->ZOOM=$ZOOM_TYPE;
- }
-
- //Zoom the picture, if the height and width are not specified, it will be zoomed
- function zoom( )
- {
- //Zoom size
- if($this->ZOOM==0)
- {
- $this->ZOOM_;gt;PICTURE_WIDTH * $this->ZOOM_MULTIPLE;
- $this->ZOOM_HEIGHT =$this->PICTURE_HEIGHT * $this->ZOOM_MULTIPLE;
- }
- //Create a new true color image
- $this->TRUE_COLOR=imagecreatetruecolor($this->ZOOM_WIDTH,$this->ZOOM_HEIGHT) ;
- $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
- imagefilledrectangle($this->TRUE_COLOR,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$WHITE);
- imagecopyresized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->ZOOM_WIDTH,$this->ZOOM_HEIGHT,$this->PICTURE_WIDTH,$this-> PICTURE_HEIGHT);
- }
-
- #end of zoom
- //Crop the picture, according to coordinates or automatically
- function cut()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->CUT_WIDTH,$this-> ;CUT_WIDTH);
- imagecopy($this->TRUE_COLOR,$this->PICTURE_CREATE, 0, 0, $this->CUT_X, $this->CUT_Y,$this->CUT_WIDTH,$this-> ;CUT_HEIGHT);
- }
-
- #end of cut
- /*
- Put text or pictures on the picture
- Watermark text
- */
- function _mark_text()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this-> ;PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- $this->WORD=mb_convert_encoding($this->FONT_WORD,'utf-8','gb2312');
- /*
- Get the text using TrueType font Range
- */
- $TEMP = imagettfbbox($this->FONT_SIZE,0,$this->FONT_PATH,$this->WORD);
- $WORD_LENGTH=strlen($this->WORD);
- $ WORD_WIDTH =$TEMP[2] - $TEMP[6];
- $WORD_HEIGHT =$TEMP[3] - $TEMP[7];
- /*
- The default position of the text watermark is the lower right corner
- */
- if($this ->WORD_X=="")
- {
- $this->WORD_X=$this->PICTURE_WIDTH-$WORD_WIDTH;
- }
- if($this->WORD_Y=="")
- {
- $this ->WORD_Y=$this->PICTURE_HEIGHT-$WORD_HEIGHT;
- }
- imagesettile($this->TRUE_COLOR,$this->PICTURE_CREATE);
- imagefilledrectangle($this->TRUE_COLOR,0,0,$ this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,IMG_COLOR_TILED);
- $TEXT2=imagecolorallocate($this->TRUE_COLOR,$this->RED,$this->GREEN,$this->Blue) ;
- imagettftext($this->TRUE_COLOR,$this->FONT_SIZE,$this->ANGLE,$this->WORD_X,$this->WORD_Y,$TEXT2,$this->FONT_PATH,$ this->WORD);
- }
-
- /*
- Watermark picture
- */
- function _mark_picture()
- {
- /*
- Get watermark picture information
- */
- @$SIZE=getimagesize($this-> FORCE_URL);
- if(!$SIZE)
- {
- exit($this->ERROR['unalviable']);
- }
- $FORCE_PICTURE_;
- $FORCE_PICTURE_HEIGHT=$SIZE[1];
- //Create watermark image
- switch($SIZE[2])
- {
- case 1:
- $FORCE_PICTURE_CREATE=imagecreatefromgif($this->FORCE_URL);
- $FORCE_PICTURE_TYPE="gif";
- break;
- case 2:
- $FORCE_PICTURE_CREATE=imagecreatefromjpeg( $this->FORCE_URL);
- $FORCE_PICTURE_TYPE="jpg";
- break;
- case 3:
- $FORCE_PICTURE_CREATE=imagecreatefrompng($this->FORCE_URL);
- $FORCE_PICTURE_TYPE="png";
- break;
- }
- /*
- Determine the size of the watermark image and generate the size of the target image. If the watermark is larger than the image, the size of the generated image will be the size of the watermark image. Otherwise, the size of the generated image will be the original image size.
- */
- $this->NEW_PICTURE=$this->PICTURE_CREATE;
- if($FORCE_PICTURE_WIDTH>$this->PICTURE_WIDTH)
- {
- $CREATE_;gt;FORCE_START_X;
- }
- else
- {
- $CREATE_;gt;PICTURE_WIDTH;
- }
-
- if($FORCE_PICTURE_HEIGHT>$this->PICTURE_HEIGHT)
- {
- $CREATE_HEIGHT=$FORCE_PICTURE_HEIGHT-$this->FORCE_START_Y;
- }
- else
- {
- $CREATE_HEIGHT=$this->PICTURE_HEIGHT;
- }
- /*
- 创建一个画布
- */
- $NEW_PICTURE_CREATE=imagecreatetruecolor($CREATE_WIDTH,$CREATE_HEIGHT);
- $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
- /*
- 将背景图拷贝到画布中
- */
- imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
-
- /*
- 将目标图片拷贝到背景图片上
- */
- imagecopy($NEW_PICTURE_CREATE, $FORCE_PICTURE_CREATE, $this->FORCE_X, $this->FORCE_Y, $this->FORCE_START_X, $this->FORCE_START_Y,$FORCE_PICTURE_WIDTH,$FORCE_PICTURE_HEIGHT);
- $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
- }
- #end of mark
-
- function alpha_()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- $rgb="#CDCDCD";
- $tran_color="#000000";
- for($j=0;$j<=$this->PICTURE_HEIGHT-1;$j++)
- {
- for ($i=0;$i<=$this->PICTURE_WIDTH-1;$i++)
- {
- $rgb = imagecolorat($this->PICTURE_CREATE,$i,$j);
- $r = ($rgb >> 16) & 0xFF;
- $g = ($rgb >> 8) & 0xFF;
- $b = $rgb & 0xFF;
- $now_color=imagecolorallocate($this->PICTURE_CREATE,$r,$g,$b);
- if ($now_color==$tran_color)
- {
- continue;
- }
- else
- {
- $color=imagecolorallocatealpha($this->PICTURE_CREATE,$r,$g,$b,$ALPHA);
- imagesetpixel($this->PICTURE_CREATE,$ALPHA_X+$i,$ALPHA_Y+$j,$color);
- }
- $this->TRUE_COLOR=$this->PICTURE_CREATE;
- }
- }
- }
-
- /*
- 图片旋转:
- 沿y轴旋转
- */
- function turn_y()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- for ($x = 0; $x < $this->PICTURE_WIDTH; $x++)
- {
- imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, $this->PICTURE_WIDTH - $x - 1, 0, $x, 0, 1, $this->PICTURE_HEIGHT);
- }
- }
- /*
- 沿X轴旋转
- */
- function turn_x()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- for ($y = 0; $y < $this->PICTURE_HEIGHT; $y++)
- {
- imagecopy($this->TRUE_COLOR, $this->PICTURE_CREATE, 0, $this->PICTURE_HEIGHT - $y - 1, 0, $y, $this->PICTURE_WIDTH, 1);
- }
- }
-
- /*
- 任意角度旋转
- */
- function turn()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- imageCopyResized($this->TRUE_COLOR,$this->PICTURE_CREATE,0,0,0,0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- $WHITE=imagecolorallocate($this->TRUE_COLOR,255,255,255);
- $this->TRUE_COLOR=imagerotate ($this->TRUE_COLOR, $this->CIRCUMROTATE, $WHITE);
- }
- /*
- 图片锐化
- */
- function sharp()
- {
- $this->TRUE_COLOR=imagecreatetruecolor($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- $cnt=0;
- for ($x=0; $x<$this->PICTURE_WIDTH; $x++)
- {
- for ($y=0; $y<$this->PICTURE_HEIGHT; $y++)
- {
- $src_clr1 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x-1, $y-1));
- $src_clr2 = imagecolorsforindex($this->TRUE_COLOR, imagecolorat($this->PICTURE_CREATE, $x, $y));
- $r = intval($src_clr2["red"]+$this->SHARP*($src_clr2["red"]-$src_clr1["red"]));
- $g = intval($src_clr2["green"]+$this->SHARP*($src_clr2["green"]-$src_clr1["green"]));
- $b = intval($src_clr2["blue"]+$this->SHARP*($src_clr2["blue"]-$src_clr1["blue"]));
- $r = min(255, max($r, 0));
- $g = min(255, max($g, 0));
- $b = min(255, max($b, 0));
- if (($DST_CLR=imagecolorexact($this->PICTURE_CREATE, $r, $g, $b))==-1)
- $DST_CLR = imagecolorallocate($this->PICTURE_CREATE, $r, $g, $b);
- $cnt++;
- if ($DST_CLR==-1) die("color allocate faile at $x, $y ($cnt).");
- imagesetpixel($this->TRUE_COLOR, $x, $y, $DST_CLR);
- }
- }
- }
-
- /*
- 将图片反色处理??
- */
- function return_color()
- {
- /*
- 创建一个画布
- */
- $NEW_PICTURE_CREATE=imagecreate($this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- $WHITE=imagecolorallocate($NEW_PICTURE_CREATE,255,255,255);
- /*
- 将背景图拷贝到画布中
- */
- imagecopy($NEW_PICTURE_CREATE, $this->PICTURE_CREATE, 0, 0, 0, 0,$this->PICTURE_WIDTH,$this->PICTURE_HEIGHT);
- $this->TRUE_COLOR=$NEW_PICTURE_CREATE;
- }
-
- /*
- 生成目标图片并显示
- */
- function show()
- {
- // 判断浏览器,若是IE就不发送头
- if(isset($_SERVER['HTTP_USER_AGENT']))
- {
- $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
- if(!preg_match('/^.*MSIE.*)$/i',$ua))
- {
- header("Content-type:$this->PICTURE_MIME");
- }
- }
- $OUT=$this->PICTURE_TYPE;
- $OUT($this->TRUE_COLOR);
- }
-
- /*
- 生成目标图片并保存
- */
- function save_picture()
- {
- // 以 JPEG 格式将图像输出到浏览器或文件
- $OUT=$this->PICTURE_TYPE;
- if(function_exists($OUT))
- {
- // 判断浏览器,若是IE就不发送头
- if(isset($_SERVER['HTTP_USER_AGENT']))
- {
- $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
- if(!preg_match('/^.*MSIE.*)$/i',$ua))
- {
- header("Content-type:$this->PICTURE_MIME");
- }
- }
- if(!$this->TRUE_COLOR)
- {
- exit($this->ERROR['unavilable']);
- }
- else
- {
- $OUT($this->TRUE_COLOR,$this->DEST_URL);
- $OUT($this->TRUE_COLOR);
- }
- }
- }
- /*
- 析构函数:释放图片
- */
- function __destruct()
- {
- /*释放图片*/
- imagedestroy($this->TRUE_COLOR);
- imagedestroy($this->PICTURE_CREATE);
- }
- #end of class
- }
- ?>
复制代码
|