<?phpclass Image { private $file; private $image; private $width; private $height; private $bits; private $mime; /** * 图片路径 * Image constructor. * @param $file */ public function __construct($file) { if (file_exists($file)) { $this->file = $file; $info = getimagesize($file); $this->width = $info[0]; $this->height = $info[1]; $this->bits = isset($info[‘bits‘]) ? $info[‘bits‘] : ‘‘; $this->mime = isset($info[‘mime‘]) ? $info[‘mime‘] : ‘‘; if ($this->mime == ‘image/gif‘) { $this->image = imagecreatefromgif($file); } elseif ($this->mime == ‘image/png‘) { $this->image = imagecreatefrompng($file); } elseif ($this->mime == ‘image/jpeg‘) { $this->image = imagecreatefromjpeg($file); } } else { exit(‘Error: Could not load image ‘ . $file . ‘!‘); } } public function getFile() { return $this->file; } public function getImage() { return $this->image; } public function getWidth() { return $this->width; } public function getHeight() { return $this->height; } public function getBits() { return $this->bits; } public function getMime() { return $this->mime; } /** * 保存新图片 * @param $file * @param int $quality 图片质量 0 -100 imagepng与imagegif函数都没有第三个参数quality。 */ public function save($file, $quality = 90) { $info = pathinfo($file); $extension = strtolower($info[‘extension‘]); if (is_resource($this->image)) { if ($extension == ‘jpeg‘ || $extension == ‘jpg‘) { imagejpeg($this->image, $file, $quality); } elseif ($extension == ‘png‘) { imagepng($this->image, $file); } elseif ($extension == ‘gif‘) { imagegif($this->image, $file); } imagedestroy($this->image); } } /** * 设置图像大小 * @param int $width * @param int $height * @param string $default 已那个高度或宽度比例为准 */ public function resize($width = 0, $height = 0, $default = ‘‘) { if (!$this->width || !$this->height) { return; } $xpos = 0; $ypos = 0; $scale = 1; $scale_w = $width / $this->width; $scale_h = $height / $this->height; if ($default == ‘w‘) { $scale = $scale_w; } elseif ($default == ‘h‘) { $scale = $scale_h; } else { $scale = min($scale_w, $scale_h); } if ($scale == 1 && $scale_h == $scale_w && $this->mime != ‘image/png‘) { return; } $new_width = (int)($this->width * $scale); $new_height = (int)($this->height * $scale); $xpos = (int)(($width - $new_width) / 2); $ypos = (int)(($height - $new_height) / 2); $image_old = $this->image; $this->image = imagecreatetruecolor($width, $height); if ($this->mime == ‘image/png‘) { imagealphablending($this->image, false); imagesavealpha($this->image, true); $background = imagecolorallocatealpha($this->image, 255, 255, 255, 127); imagecolortransparent($this->image, $background); } else { $background = imagecolorallocate($this->image, 255, 255, 255); } imagefilledrectangle($this->image, 0, 0, $width, $height, $background); imagecopyresampled($this->image, $image_old, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->width, $this->height); imagedestroy($image_old); $this->width = $width; $this->height = $height; } /** * 添加图片水印 * @param $watermark 水印图片对象 * @param string $position 水印位置 */ public function watermark($watermark, $position = ‘bottomright‘) { switch($position) { case ‘topleft‘: //左上 $watermark_pos_x = 0; $watermark_pos_y = 0; break; case ‘topright‘://右上 $watermark_pos_x = $this->width - $watermark->getWidth(); $watermark_pos_y = 0; break; case ‘bottomleft‘://左下 $watermark_pos_x = 0; $watermark_pos_y = $this->height - $watermark->getHeight(); break; case ‘bottomright‘://右下 $watermark_pos_x = $this->width - $watermark->getWidth(); $watermark_pos_y = $this->height - $watermark->getHeight(); break; } imagecopy($this->image, $watermark->getImage(), $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark->getWidth(), $watermark->getHeight()); imagedestroy($watermark->getImage()); } /** * 裁剪图片有效部分 * @param $top_x * @param $top_y * @param $bottom_x * @param $bottom_y */ public function crop($top_x, $top_y, $bottom_x, $bottom_y) { $image_old = $this->image; $this->image = imagecreatetruecolor($bottom_x - $top_x, $bottom_y - $top_y); imagecopy($this->image, $image_old, 0, 0, $top_x, $top_y, $this->width, $this->height); imagedestroy($image_old); $this->width = $bottom_x - $top_x; $this->height = $bottom_y - $top_y; } /** * 旋转图片 * @param $degree * @param string $color */ public function rotate($degree, $color = ‘FFFFFF‘) { $rgb = $this->html2rgb($color); $this->image = imagerotate($this->image, $degree, imagecolorallocate($this->image, $rgb[0], $rgb[1], $rgb[2])); $this->width = imagesx($this->image); $this->height = imagesy($this->image); } private function filter() { $args = func_get_args(); call_user_func_array(‘imagefilter‘, $args); } private function text($text, $x = 0, $y = 0, $size = 5, $color = ‘000000‘) { $rgb = $this->html2rgb($color); imagestring($this->image, $size, $x, $y, $text, imagecolorallocate($this->image, $rgb[0], $rgb[1], $rgb[2])); } /** * 合并水印图片 * @param $merge * @param int $x * @param int $y * @param int $opacity */ private function merge($merge, $x = 0, $y = 0, $opacity = 100) { imagecopymerge($this->image, $merge->getImage(), $x, $y, 0, 0, $merge->getWidth(), $merge->getHeight(), $opacity); } /** * 16进制颜色转rgb * @param $color * @return array|bool */ private function html2rgb($color) { if ($color[0] == ‘#‘) { $color = substr($color, 1); } if (strlen($color) == 6) { list($r, $g, $b) = array($color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5]); } elseif (strlen($color) == 3) { list($r, $g, $b) = array($color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2]); } else { return false; } $r = hexdec($r); $g = hexdec($g); $b = hexdec($b); return array($r, $g, $b); }} $imgpath = "old/1.jpg";$newimgpath = "new/";$type = 1;$image = new Image($imgpath); $width = $image->getWidth();$height = $image->getHeight();//$width $height 为新图片的高度和宽度$image->resize($width, $height); //输入新图片$image->save($newimgpath);
原文地址:https://www.cnblogs.com/jj0219/p/10436287.html
时间: 2024-08-29 22:00:37