php怎么实现在图片上做标记,PHP实现可添加水印与生成缩略图的图片处理工具类...

本文实例讲述了PHP实现可添加水印与生成缩略图的图片处理工具类。分享给大家供大家参考,具体如下:

ImageTool.class.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('Content-type:' . $info['mime']);

$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) . '.' . $type);

} else {

$funs($image, $this->outputDir . md5($this->imagePath) . '.' . $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使用

首先导入ImageTool工具:

require_once 'ImageTool.class.php';

然后实例化ImageTool对象:

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

一、生成压缩图片

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

$imageTool->showImage();

32d0265470b15adb255167d065fe4728.png

二、添加文字水印

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

$imageTool->showImage();

b94471a1e8e4ce938efdd5989077bed6.png

三、添加图片水印

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

$imageTool->showImage();

2d246ed3f03084c46eeaf2932d53e416.png

仅当做临时图像输出:

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

PS:这里再为大家推荐几款比较实用的图片处理工具供大家参考使用:

希望本文所述对大家PHP程序设计有所帮助。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值