Home > Article > Backend Development > PHP common image processing classes_PHP tutorial
We often need watermark thumbnails when operating images, and the watermark can be assigned or selected. 1 represents upper left, 2 represents middle left, 3 represents left and right, 4 represents middle left, 5 represents middle left, and 6 represents Center right, 7 represents bottom, 8 represents bottom center, 9 represents bottom right, 0 represents random position
The code is as follows | Copy code |
/*Known issues: 1. In the image scaling function, use the imagecreatetruecolor function to create a canvas and use the transparency processing algorithm, but images in PNG format cannot be transparent. Creating a canvas using the imagecreate function can solve this problem, but the number of colors in the scaled image is too small * * *type value: * (1): Represents the use of the image zoom function. At this time, $value1 represents the width of the zoomed image, and $value2 represents the height of the zoomed image * (2): Represents the use of the image cropping function. At this time, $value1 represents the coordinates of the cropping start point. For example: starting from the origin is "0,0", with the x-axis in front and the y-axis in the back, separated by, in the middle, $ value2 represents the width and height of cropping, also in the form of "20, 20" * (3): Represents the use of the image watermark function. At this time, $value1 represents the file name of the watermark image, $value2 represents the position of the watermark in the image, there are 10 values to choose from, 1 represents the upper left, 2 represents the middle left, 3 represents left and right, 4 represents center left, 5 represents center, 6 represents center right, 7 represents bottom, 8 represents bottom center, 9 represents bottom right, 0 represents random position * */ class image{ private $types; //Function numbers used, 1 is the image zoom function, 2 is the image cropping function, 3, the image watermark function is added to the image private $imgtype;//Format of image private $image; //Image resources private $width;//image width private $height;//image height private $value1;//Depending on the type value passed, $value1 represents different values private $value2;//Depending on the type value passed, $value2 represents different values private $endaddress;//Output address + file name function __construct($imageaddress, $types, $value1="", $value2="", $endaddress){ $this->types=$types; $this->image=$this->imagesources($imageaddress); $this->width=$this->imagesizex(); $this->height=$this->imagesizey(); $this->value1=$value1; $this->value2=$value2; $this->endaddress=$endaddress; } function outimage(){ //Output different functions according to the different type values passed in switch($this->types){ case 1: $this->scaling(); break; case 2: $this->clipping(); break; case 3: $this->imagewater(); break; default: return false; } } private function imagewater(){ //Add image watermark function //Use function to get the length and width of the watermark file $imagearrs=$this->getimagearr($this->value1); //Call the function to calculate the location where the watermark is loaded $positionarr=$this->position($this->value2, $imagearrs[0], $imagearrs[1]); //Add watermark imagecopy($this->image, $this->imagesources($this->value1), $positionarr[0], $positionarr[1], 0, 0, $imagearrs[0], $imagearrs[1 ]); //Call the output method to save $this->output($this->image); } private function clipping(){ //Image cropping function //Assign the passed in values to variables list($src_x, $src_y)=explode(",", $this->value1); list($dst_w, $dst_h)=explode(",", $this->value2); if($this->width < $src_x+$dst_w || $this->height < $src_y+$dst_h){ //This judgment is to limit the interception outside the picture return false; } //Create a new canvas resource $newimg=imagecreatetruecolor($dst_w, $dst_h); //Crop imagecopyresampled($newimg, $this->image, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $dst_w, $dst_h); //Call the output method to save $this->output($newimg); } private function scaling(){ //Image scaling function //Get the width and height of proportional scaling $this-> proimagesize(); //Scale according to parameters and call the output function to save the processed file $this->output($this->imagescaling()); } private function imagesources($imgad){ //Get the image type and open the image resource $imagearray=$this->getimagearr($imgad); switch($imagearray[2]){ case 1://gif $this->imgtype=1; $img=imagecreatefromgif($imgad); break; case 2://jpeg $this->imgtype=2; $img=imagecreatefromjpeg($imgad); break; case 3://png $this->imgtype=3; $img=imagecreatefrompng($imgad); break; default: return false; } return $img; } private function imagesizex(){ //Get image width return imagesx($this->image); } private function imagesizey(){ //Get the image height return imagesy($this->image); } private function proimagesize(){ //Calculate the width and height of the proportionally scaled image if($this->value1 && ($this->width < $this->height)) { //Equal scaling algorithm $this->value1=round(($this->value2/ $this->height)*$this->width); }else{ $this->value2=round(($this->value1/ $this->width) * $this->height); } } private function imagescaling(){//Image scaling function, returns the processed image resource $newimg=imagecreatetruecolor($this->value1, $this->value2); $tran=imagecolortransparent($this->image);//Processing transparency algorithm if($tran >= 0 && $tran < imagecolorstotal($this->image)){ $tranarr=imagecolorsforindex($this->image, $tran); $newcolor=imagecolorallocate($newimg, $tranarr['red'], $tranarr['green'], $tranarr['blue']); imagefill($newimg, 0, 0, $newcolor); imagecolortransparent($newimg, $newcolor); } imagecopyresampled($newimg, $this->image, 0, 0, 0, 0, $this->value1, $this->value2, $this->width, $this->height); return $newimg; } private function output($image){//Output image switch($this->imgtype){ case 1: imagegif($image, $this->endaddress); break; case 2: imagejpeg($image, $this->endaddress); break; case 3: imagepng($image, $this->endaddress); break; default: return false; } } private function getimagearr($imagesou){//Return image attribute array method return getimagesize($imagesou); } private function position($num, $width, $height){//Return the coordinates of a position based on the passed in number, $width and $height respectively represent the width and height of the inserted image switch($num){ case 1: $positionarr[0]=0; $positionarr[1]=0; break; case 2: $positionarr[0]=($this->width-$width)/2; $positionarr[1]=0; break; case 3: $positionarr[0]=$this->width-$width; $positionarr[1]=0; break; case 4: $positionarr[0]=0; $positionarr[1]=($this->height-$height)/2; break; case 5: $positionarr[0]=($this->width-$width)/2; $positionarr[1]=($this->height-$height)/2; break; case 6: $positionarr[0]=$this->width-$width; $positionarr[1]=($this->height-$height)/2; break; case 7: $positionarr[0]=0; $positionarr[1]=$this->height-$height; break; case 8: $positionarr[0]=($this->width-$width)/2; $positionarr[1]=$this->height-$height; break; case 9: $positionarr[0]=$this->width-$width; $positionarr[1]=$this->height-$height; break; case 0: $positionarr[0]=rand(0, $this->width-$width); $positionarr[1]=rand(0, $this->height-$height); break; } return $positionarr; } function __destruct(){ imagedestroy($this->image); } } ?> |