用到两个image系统函数

imagecopymerge — 拷贝并合并图像的一部分

imagecopyresampled — 重采样拷贝部分图像并调整大小

/*
如何知道图片的大小和类型
无法确认调用函数:Imagecreatefrompng/jpeg……
可以独处图片的宽和高 相当于宽高是已知的
一个重要的函数getimagesize()
*/ /*
想操作图片
先把图片的大小,类型信息得到 水印:就是把指定的水印复制到目标上,并加透明效果 缩略图:就是把大图片复制到小尺寸画面上 */ class ImageTool{ //imageinfo 分析图片的信息
//return array()
public static function imageInfo($image){
//判断图片是否存在
if(!file_exists($image)){
return false; }
$info = getimagesize($image);
if($info == false){
return false;
} //此时info分析出来是一个数组
$img['width'] = $info[0];
$img['height'] = $info[1];
//分析图片的后缀
$img['ext'] = substr($info['mime'],strpos($info['mime'],'/')+1); return $img;
} /*
加水印
string $dst 待操作图片
$water 水印小图
$save 不填,则默认替换原始图
$alpha 透明度
$pos 水印图放的位置1234,顺时针
*/
public static function water($dst,$water,$save=NULL,$pos=2,$alpha=50){
//先保证两个图片存在
if(!file_exists($dst) || !file_exists($water)){
return false;
} //1.保证水印不能比待操作图片还大
$dinfo = self::imageInfo($dst);
$winfo = self::imageInfo($water); //判断
if($winfo['height'] > $dinfo['height'] || $winfo['width'] > $dinfo['width']){
return false;
} //两张图,读到画布上,但是图片可能是png,可能是jpeg,用什么函数来读
$dfunc = 'imagecreatefrom' .$dinfo['ext'];
$wfunc = 'imagecreatefrom' .$winfo['ext']; if(!function_exists($dfunc) || !function_exists($wfunc)){
return false;
} //动态加载函数来创建画布
$dim = $dfunc($dst); //创建待操作的画布
$wim = $wfunc($water); //创建水印画布 //根据水印的位置,计算粘贴的坐标
switch($pos){
case 0; //左上角
$posx = 0;
$posy = 0;
break; case 1; //右上角
$posx = $dinfo['width'] - $winfo['width'];
$posy = 0;
break; case 2; //左下角
$posx = 0;
$posy = $dinfo['height'] - $winfo['height'];
break; default: //默认右下角
$posx = $dinfo['width'] - $winfo['width'];
$posy = $dinfo['height'] - $winfo['height']; } //加水印 在什么位置?
// imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct ) imagecopymerge($dim,$wim,$posx,$posy,0,0,$winfo['width'],$winfo['height'],$alpha); if(!$save){ $save=$dst;
unlink($dst); //删除原图
} //保存图片
$createfunc = 'image' . $dinfo['ext'];
$createfunc($dim,$save); //销毁图片
imagedestroy($dim);
imagedestroy($wim); return true;
} /*
thumb 生成缩略图
等比例缩放,两边留白
*/
public static function thumb($dst,$save=NULL,$width=200,$height=200){
//首先判断待处理的图片是否存在
$dinfo = self::imageInfo($dst);
if($dinfo == false){
return false;
} //计算缩放比例
$calc = min($width/$dinfo['width'],$height/$dinfo['height']); //创建原始图的画布
$dfunc = 'imagecreatefrom'.$dinfo['ext'];
$dim = $dfunc($dst); //创建缩略图画布
$tim = imagecreatetruecolor($width,$height); //创建白色填充缩略图画布
$white = imagecolorallocate($tim,255,255,255); //填充缩略画布
imagefill($tim,0,0,$white); //复制并缩略
$dwidth = (int)$dinfo['width']*$calc;
$dheight = (int)$dinfo['height']*$calc; $paddingx = ($width - $dwidth) / 2;
$paddingy = ($height - $dheight) /2; imagecopyresampled($tim,$dim,$paddingx,$paddingy,0,0,$dwidth,$dheight,$dinfo['width'],$dinfo['height']); //保存图片
if(!$save){
$save = $dst;
unlink($dst);
}
$createfun = 'image'.$dinfo['ext'];
$createfun($tim,$save); imagedestroy($dim);
imagedestroy($tim); return true; }

调用传参:

//调用传参  加水印
echo ImageTool::water('原图片地址','加水印图片地址','生成图片')?'ok':false;
//调用 缩略图
echo ImageTool::thumb('原图地址','生成图片地址',200,200)?'ok':false;

php之图片处理类缩略图加水印的更多相关文章

  1. [原创]超强C#图片上传,加水印,自动生成缩略图源代码

    <%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ ...

  2. ECSHOP商品描述和文章里不加水印,只在商品图片和商品相册加水印

    fckeditor\editor\filemanager\connectors\php //判断并给符合条件图片加上水印 if ($**tension == 'jpg' || $**tension = ...

  3. PHP的图片处理类(缩放、加图片水印和剪裁)

    <!--test.php文件内容--> <?php //包含这个类image.class.php include "image.class.php"; $img ...

  4. PHP生成缩略图、加水印

    <?php class ThumbWaterImages{ /** * 生成缩略图/加水印 * classname ThumbWaterImages * datetime:2015-1-15 * ...

  5. 帝国cms更换Ueditor编辑器上传图片加水印

    Ueditor安装包,里面有个/php/文件夹,找到Uploader.class.php,这是通用上传类文件找到private function upFile(),这是上传文件的主处理方法,找到122 ...

  6. Android中的缩略图加载-不浪费一点多余的内存

    1. Why,为什么要加载缩略图? 有的时候不需要展示原图,只需展示图片的缩略图,可以节省内存.比如:网易新闻中的图片浏览,左边展示的小狮子图片就是一个缩略图,点击这个图片,才会展示原图.   2. ...

  7. PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转

    [强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...

  8. 黄聪:C#图片处理封装类(裁剪、缩放、清晰度、加水印、生成缩略图)有示例(转)

    C#图片处理示例(裁剪,缩放,清晰度,水印) 吴剑 2011-02-20 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的一些应用,比 ...

  9. 使用 ImageEnView 给图片加水印,及建缩略图

    摘要: 使用 ImageEnView 给图片加水印,及建缩略图 {Power by hzqghost@21cn.com}unit CutWater; interface uses  Math,imag ...

随机推荐

  1. UVa 3704 Cellular Automaton(矩乘)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15129 [思路] 矩阵乘法-循环矩阵 题目中的转移矩阵是一个循环矩 ...

  2. xapian搜索系统存储结构解读

    Xapian的database是所有用于检索的信息表的集合,以下的表是必需的: posting list table 保存了被每一个term索引的document,实际上保存的应该是document在 ...

  3. openstack 控制节点大流量对外发包,nf_conntrack,table full droping packets

    某些人很MJJ,挂了N多代理来疯狂采集,把服务器带宽都耗尽了,没办法只好封掉一些! 目前发现的问题openStack kilo for ubuntu manuual运行一段时间后 云平台的控制节点p5 ...

  4. Coprimes - SGU 102(求互质数,水)

    题目大意:给你一个正整数N,求出来不超过N 的并且与N互质的正整数的个数. 就是一个大水题~~~ 代码: #include<stdio.h> #include<string.h> ...

  5. 29. Divide Two Integers

    用加减法模拟除法. 除法本质就是 被除数 - 商个除数相加 = 0 如果你电脑足够好,可以无限减..但是这个题肯定不是这么简单. 最快的方法还是 减去 商乘以除数. 但是这里不能使用乘法,那只好用BI ...

  6. 如何注册dll、ocx控件

    在程序集成时,有时需要对厂家提供的dll或者ocx控件进行注册.其一般操作为:开始>命令指示符(右击管理员身份运行)>regsvr32 文件路径. 比如对devocx.ocx进行注册,在F ...

  7. js学习笔记之包装对象

    JavaScript包装对象 近日有时间,闲下来好好学习原生js JavaScript是一门面向对象语言,使用"."就可以访问对象的属性和方法,而基本类型(null, undefi ...

  8. cocos2d与cocos2d-X中的draw和update

    像其它的游戏引擎一样,我们有两个不同的方法来完成draw和update. 1: Draw:每一个CCNode都有一个draw方法,每一帧都会调用.我们只在这个方法里做描绘的事情. 2: Update: ...

  9. AnonymousType匿名类型和对象之间的转换

    本文转载:http://www.cnblogs.com/dean-Wei/p/3150553.html 一.匿名对象转换为对象. 1.问题: 2.解决方案:强制指定类型. 解决之. 二. 对象转换为匿 ...

  10. android uri , file , string 互转

    1:android Uri 介绍 http://www.cnblogs.com/lingyun1120/archive/2012/04/18/2455212.html 2:File 转成Uri < ...