• 上传一个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);
  • 相关阅读:
    开放源码的对象关系映射工具ORM.NET 插入数据 Insert/Update Data
    开放源码的对象关系映射工具ORM.NET 快档开发入门 Quick Start
    .NET 动态脚本语言Script.NET 开发指南
    开放源码的对象关系映射工具ORM.NET 删除数据 Deleting Records using ORM.NET
    .NET Remoting过时了吗?为什么公司的项目还是选择用.NET Remoting,而不是WCF?
    开放源码的对象关系映射工具ORM.NET 查看和显示数据 View and Display data using ORM.NET
    开放源码的对象关系映射工具ORM.NET 查询表 调用存储过程 增加自定义代码
    技术人生:坚持,每日一博
    CQRS:CQRS + DDD + MDP 实现快速应用程序开发
    NodeJs:Happy代码生成器,重构了代码,更新了文档,完善了示例,欢迎下载使用
  • 原文地址:https://www.cnblogs.com/jj0219/p/10436287.html
Copyright © 2020-2023  润新知