Maison  >  Article  >  développement back-end  >  PHP implémente des outils de traitement d'images capables d'ajouter des filigranes et de générer des compétences thumbnails_php

PHP implémente des outils de traitement d'images capables d'ajouter des filigranes et de générer des compétences thumbnails_php

jacklove
jackloveoriginal
2018-06-30 17:51:321482parcourir

Cet article présente principalement PHP pour implémenter des outils de traitement d'images capables d'ajouter des filigranes et de générer des vignettes. Il implique les compétences opérationnelles liées à PHP pour l'affichage, l'enregistrement, la compression, les filigranes, etc. Les amis qui en ont besoin peuvent s'y référer

L'exemple de cet article décrit l'implémentation PHP d'une classe d'outils de traitement d'image qui peut ajouter des filigranes et générer des vignettes. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

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;
  }
}

Utilisation d'ImageTool

Importez d'abord l'outil ImageTool :

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

Instanciez ensuite l'objet ImageTool :

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

1. Générez des images compressées

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

2. Ajouter un filigrane de texte

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

3. Ajouter un filigrane d'image

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

Utilisé uniquement comme sortie d'image temporaire :

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

PS : Voici quelques outils de traitement d'image plus pratiques recommandés pour tout le monde. Utilisation de référence :

Outil de recadrage/génération d'images en ligne :
http://tools.jb51.net/ aideddesign/imgcut

Outil BASE64 de conversion d'images en ligne :
http://tools.jb51.net/transcoding/img2base64

Outil de génération d'icônes ICO en ligne :
http://tools.jb51.net/aideddesign/ico_img

Outil de création d'icônes d'e-mail en ligne :
http://tools.jb51.net/email/mailillogo

Outil de conversion de format d'image en ligne (jpg/bmp/gif/png) :
http://tools.jb51.net/aideddesign/picext

Articles qui pourraient vous intéresser :

Implémentation PHP Une explication sur la façon d'imprimer un arbre binaire en ordre zigzag

Une explication sur la façon d'obtenir une image d'arbre binaire avec PHP

PHP pour obtenir la liste chaînée Explication de la méthode du Kème dernier nœud

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn