php之图片处理类缩略图加水印
用到两个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之图片处理类缩略图加水印的更多相关文章
- [原创]超强C#图片上传,加水印,自动生成缩略图源代码
<%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ ...
- ECSHOP商品描述和文章里不加水印,只在商品图片和商品相册加水印
fckeditor\editor\filemanager\connectors\php //判断并给符合条件图片加上水印 if ($**tension == 'jpg' || $**tension = ...
- PHP的图片处理类(缩放、加图片水印和剪裁)
<!--test.php文件内容--> <?php //包含这个类image.class.php include "image.class.php"; $img ...
- PHP生成缩略图、加水印
<?php class ThumbWaterImages{ /** * 生成缩略图/加水印 * classname ThumbWaterImages * datetime:2015-1-15 * ...
- 帝国cms更换Ueditor编辑器上传图片加水印
Ueditor安装包,里面有个/php/文件夹,找到Uploader.class.php,这是通用上传类文件找到private function upFile(),这是上传文件的主处理方法,找到122 ...
- Android中的缩略图加载-不浪费一点多余的内存
1. Why,为什么要加载缩略图? 有的时候不需要展示原图,只需展示图片的缩略图,可以节省内存.比如:网易新闻中的图片浏览,左边展示的小狮子图片就是一个缩略图,点击这个图片,才会展示原图. 2. ...
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
[强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...
- 黄聪:C#图片处理封装类(裁剪、缩放、清晰度、加水印、生成缩略图)有示例(转)
C#图片处理示例(裁剪,缩放,清晰度,水印) 吴剑 2011-02-20 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的一些应用,比 ...
- 使用 ImageEnView 给图片加水印,及建缩略图
摘要: 使用 ImageEnView 给图片加水印,及建缩略图 {Power by hzqghost@21cn.com}unit CutWater; interface uses Math,imag ...
随机推荐
- UILabel的使用方法
UILabel 就是一个显示文字的控件,可以设置文字的各种属性. 构造方法: //通过设置Label的边框来初始化UILabel labelOfSlider = [[UILabelal ...
- octopress的一些总结
1.编辑_config.yml 的description时,不能使用tab键 2.修改主题‘MediumFox’ description 和 文章展示的宽度,修改文件home_landing_row ...
- hdoj 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心部分背包】
悼念512汶川大地震遇难同胞——老人是真饿了 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- poj 1328 Radar Installation【贪心区间选点】
Radar Installation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other) ...
- NewSQL——优化的SQL存储引擎(TokuDB, MemSQL)+?
NewSQL 是对各种新的可扩展/高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性. NewSQL 是指这样一类新式的关系型数据库 ...
- maven tomcat1.7环境下构建javaweb 项目
tomcat用户权限设置 在tomcat安装路径\conf目录下tomcat-users.xml添加: <role rolename="admin-gui"/> < ...
- Qt之遍历文件夹(经典详解)
关于Qt操作文件夹.文件的知识用途较多,比如遍历下一层乃至所有子孙文件.文件夹,获取它们的一些信息(大小.类型.最后更改时间等).当然,也可以进行级联删除. 首先看简单的: 一.Qt遍历文件夹 ...
- const char*, char const* and char *const 分类: C/C++ OpenCV 2014-11-08 18:10 114人阅读 评论(0) 收藏
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目. 事实上这个概念谁都有只是三种声明方式非常相似很容易记混. Bjarne在他的 ...
- Spring DI模式 小样例
今儿跟同事讨论起来spring早期的,通过大篇幅xml的配置演变到今天annotation的过程,然后随手写了个小样例,感觉还不错,贴到这里留个纪念. 样例就是用JAVA API的方式, ...
- xslt语法之---基础语法
1. XSLT常用元素: 1.1 <xsl:template>:创建模板 Match属性的作用是使模板和XML元素相关联 <xsl:template match=" ...