123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- class ImageBack
- {
- protected $filename;
- protected $fileExt = "";
- protected $croppedWidth = 0;
- protected $croppedHeight = 0;
- protected $width = 0;
- protected $height = 0;
- protected $croppedX = 0;
- protected $croppedY = 0;
- protected $source;
- protected $cropped;
- protected $process = true;
- protected $funName = "jpeg";
- function __construct($filename)
- {
- $this->filename = $filename;
- $fileExt = pathinfo($filename, PATHINFO_EXTENSION);
- $this->fileExt = $fileExt;
- switch ($this->fileExt) {
- case 'jpg':
- case 'jpeg':
- $this->funName = "jpeg";
- break;
- case 'png':
- $this->funName = 'png';
- break;
- case 'webp':
- $this->funName = 'webp';
- break;
- default:
- $this->process = false;
- }
- if ($this->process) {
- $fun = 'imagecreatefrom' . $this->funName;
- $this->source = $fun($filename);
- $this->width = imagesx($this->source);
- $this->height = imagesy($this->source);
- }
- }
- public function resize($croppedWidth, $croppedHeight = 0, $croppedX = 0, $croppedY = 0): ImageBack
- {
- if ($this->process) {
- $this->croppedHeight = $croppedHeight;
- $this->croppedWidth = $croppedWidth;
- $this->croppedX = $croppedX;
- $this->croppedY = $croppedY;
- if ($croppedWidth >= $this->width) {
- $this->croppedWidth = $this->width;
- }
- if ($croppedHeight == 0) {
- $this->croppedHeight = (int)($this->height / ($this->width / $this->croppedWidth));
- } else if ($croppedHeight >= $this->height) {
- $this->croppedHeight = $this->height;
- }
- $this->cropped = imagecreatetruecolor($this->croppedWidth, $this->croppedHeight);
- if ($this->funName == 'png'|| $this->funName == 'webp') {
- // 将图像设置为支持 alpha 通道的模式
- imagealphablending($this->cropped, false);
- imagesavealpha($this->cropped, true);
- $transparentColor = imagecolorallocatealpha($this->cropped, 0, 0, 0, 127);
- imagefill($this->cropped, 0, 0, $transparentColor);
- }
- }
- return $this;
- }
- public function save($savePath)
- {
- if ($this->process) {
- try {
- imagecopyresampled($this->cropped, $this->source, 0, 0, 0, 0, $this->croppedWidth, $this->croppedHeight, $this->width, $this->height);
- $fun = 'image' . $this->funName;
- $fun($this->cropped, $savePath);
- imagedestroy($this->source);
- return true;
- } catch (Exception $exception) {
- return $exception->getMessage();
- }
- }
- return false;
- }
- }
|