Home  >  Article  >  Backend Development  >  PHP implements image processing tools that can add watermarks and generate thumbnails_php skills

PHP implements image processing tools that can add watermarks and generate thumbnails_php skills

jacklove
jackloveOriginal
2018-06-30 17:51:321494browse

This article mainly introduces PHP to implement image processing tools that can add watermarks and generate thumbnails. It involves PHP's related operating skills for image display, saving, compression, watermarks, etc. Friends in need can refer to the following

The example of this article describes the PHP implementation of an image processing tool class that can add watermarks and generate thumbnails. Share it with everyone for your reference, the details are as follows:

ImageTool.class.php

<?php
class ImageTool
{
  private $imagePath;//图片路径
  private $outputDir;//输出文件夹
  private $memoryImg;//内存图像
  public function __construct($imagePath, $outputDir = null)
  {
    $this->imagePath = $imagePath;
    $this->outputDir = $outputDir;
    $this->memoryImg = null;
  }
  /**
   * 显示内存中的图片
   * @param $image
   */
  public function showImage()
  {
    if ($this->memoryImg != null) {
      $info = getimagesize($this->imagePath);
      $type = image_type_to_extension($info[2], false);
      header(&#39;Content-type:&#39; . $info[&#39;mime&#39;]);
      $funs = "image{$type}";
      $funs($this->memoryImg);
      imagedestroy($this->memoryImg);
      $this->memoryImg = null;
    }
  }
  /**将图片以文件形式保存
   * @param $image
   */
  private function saveImage($image)
  {
    $info = getimagesize($this->imagePath);
    $type = image_type_to_extension($info[2], false);
    $funs = "image{$type}";
    if (empty($this->outputDir)) {
      $funs($image, md5($this->imagePath) . &#39;.&#39; . $type);
    } else {
      $funs($image, $this->outputDir . md5($this->imagePath) . &#39;.&#39; . $type);
    }
  }
  /**
   * 压缩图片
   * @param $width 压缩后宽度
   * @param $height 压缩后高度
   * @param bool $output 是否输出文件
   * @return resource
   */
  public function compressImage($width, $height, $output = false)
  {
    $image = null;
    $info = getimagesize($this->imagePath);
    $type = image_type_to_extension($info[2], false);
    $fun = "imagecreatefrom{$type}";
    $image = $fun($this->imagePath);
    $thumbnail = imagecreatetruecolor($width, $height);
    imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
    imagedestroy($image);
    if ($output) {
      $this->saveImage($thumbnail);
    }
    $this->memoryImg = $thumbnail;
    return $this;
  }
  /**
   * 为图像添加文字标记
   *
   * @param $content 文本内容
   * @param $size 字体大小
   * @param $font 字体样式
   * @param bool $output 是否输出文件
   * @return $this
   */
  public function addTextmark($content, $size, $font, $output = false)
  {
    $info = getimagesize($this->imagePath);
    $type = image_type_to_extension($info[2], false);
    $fun = "imagecreatefrom{$type}";
    $image = $fun($this->imagePath);
    $color = imagecolorallocatealpha($image, 0, 0, 0, 80);
    $posX = imagesx($image) - strlen($content) * $size / 2;
    $posY = imagesy($image) - $size / 1.5;
    imagettftext($image, $size, 0, $posX, $posY, $color, $font, $content);
    if ($output) {
      $this->saveImage($image);
    }
    $this->memoryImg = $image;
    return $this;
  }
  /**
   * 为图片添加水印
   *
   * @param $watermark 水印图片路径
   * @param $alpha 水印透明度(0-100)
   * @param bool $output 是否输出文件
   * @return $this
   */
  public function addWatermark($watermark, $alpha, $output = false)
  {
    $image_info = getimagesize($this->imagePath);
    $image_type = image_type_to_extension($image_info[2], false);
    $image_fun = "imagecreatefrom{$image_type}";
    $image = $image_fun($this->imagePath);
    $mark_info = getimagesize($watermark);
    $mark_type = image_type_to_extension($mark_info[2], false);
    $mark_fun = "imagecreatefrom{$mark_type}";
    $mark = $mark_fun($watermark);
    $posX = imagesx($image) - imagesx($mark);
    $posY = imagesy($image) - imagesy($mark);
    imagecopymerge($image, $mark, $posX, $posY, 0, 0, $mark_info[0], $mark_info[1], $alpha);
    if ($output) {
      $this->saveImage($image);
    }
    $this->memoryImg = $image;
    return $this;
  }
}

ImageTool usage

First import the ImageTool tool:

require_once &#39;ImageTool.class.php&#39;;

Then instantiate ImageTool Object:

$imageTool = new ImageTool(&#39;img/oppman.jpeg&#39;, &#39;out/&#39;);//图片路径、输出文件夹

1. Generate compressed pictures

$imageTool->compressImage(350, 250, true);//压缩宽度、压缩高度、是否保存
$imageTool->showImage();

2. Add text watermark

$imageTool->addTextmark(&#39;一拳超人&#39;, 50, &#39;res/micro.ttf&#39;, true);//内容、尺寸、字体、是否保存
$imageTool->showImage();

3. Add image watermark

$imageTool->addWatermark(&#39;res/logo.jpeg&#39;, 100, true);//水印路径、透明度、是否保存
$imageTool->showImage();

##Only as a temporary image output:

$imageTool->addTextmark(&#39;快捷输出&#39;, 50, &#39;res/micro.ttf&#39;)->showImage();

PS: Here are some more practical image processing tools recommended for your reference:

Online image cropping/generation tool:
http://tools.jb51.net/aideddesign/imgcut

Online image BASE64 conversion tool:
http://tools.jb51.net/transcoding/img2base64

ICO icon online generation tool:
http://tools.jb51.net/aideddesign/ico_img

Online Email Icon Making Tool:
http://tools. jb51.net/email/mailillogo

Online image format conversion (jpg/bmp/gif/png) tool:
http://tools.jb51 .net/aideddesign/picext

##Articles you may be interested in:

Explanation on how to print binary trees in zigzag order with PHP


Explanation of the method of obtaining the binary tree image with PHP


Explanation of the method of obtaining the Kth node from the last in the linked list with PHP


The above is the detailed content of PHP implements image processing tools that can add watermarks and generate thumbnails_php skills. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn