php 将处理的图片上传,上传一个php图片处理类

class 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值