GD库添加图片水印和缩略图

在平时,我们经常遇到给图片加水印的问题,例如给图片加水印做版权保护,我们可以通过GD库来解决这个问题。

  1. 首先就是开启GD库
    在php.ini文件里面可以开启GD库。

  2. 建立操作图像类image.class.php

<?php
class Image {
  /*图片基本信息*/
  private $info;
  /*打开图片,读取到内存中*/
  public function __construct($src) {
    $info = getimagesize($src);
    $this->info = array(
      'width' => $info[0],
      'height' => $info[1],
      'type' => image_type_to_extension($info[2],false),
      'mime' => $info['mime']
    );
    $fun = "imagecreatefrom{$this->info['type']}";
    $this->image = $fun($src);
  }
  /*压缩图片*/
  public function thumb($width, $height) {
    $image_thumb = imagecreatetruecolor($width, $height);
    imagecopyresampled($image_thumb, $this->image, 0, 0, 0, 0, $width, $height, $this->info['width'], $this->info['height']);
    imagedestroy($this->image);
    $this->image = $image_thumb;
  }
  /*操作图片(添加文字水印)*/
  public function fontMark($content, $font_url, $size, $color, $local, $angle) {
    $col = imagecolorallocatealpha($this->image, $color[0], $color[1], $color[2]);
    imagettftext($this->image, $size, $angle, $local['x'], $local['y'], $col, $font_url, $content);
  }
  /*操作图片(添加图片水印)*/
  public function imageMark($source, $local, $alpha) {
    $info = getimagesize($source);
    $type = image_type_to_extension($info[2],false);
    $fun = "imagecreatefrom{$type}";
    $water = $fun($source);
    imagecopymerge($this->image, $water, $local['x'], $local['y'], 0, 0, $info[0], $info[1], $alpha);
    imagedestroy($water);
  }
  /*在浏览器中输出图片*/
  public function show() {
    header("Content-type:".$this->info['mime']);
    $funs = "image{$this->info['type']}";
    $funs($this->image);
  }
  /*把图片保存到硬盘中*/
  public function save($newname) {
    $funs = "image{$this->info['type']}";
    $funs($this->image, $newname.".".$this->info['type']);
  }
  /*销毁图片*/
  public function __destruct() {
    imagedestroy($this->image);
  }
}
?>
  1. 测试test.php(测试字体水印和缩略图)
require 'image.class.php';
$src = "image1.jpg";
$content = "Hello World!";
$font_url = "msyh.ttf";
$size = 20;
$color = array(
  0 => 255,
  1 => 255,
  2 => 255,
  3 => 20
);
$local = array(
  'x' => 20,
  'y' => 70
);
$angle = 10;
$image = new Image($src);
$image->fontMark($content, $font_url, $size, $color, $local, $angle);
$image->show();
$image->save("fontMark");

总结:1.这篇写的太草率了;
2.掌握了面向对象的思想在编程中真的很有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值