用到两个image系统函数

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

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

  1. /*
  2. 如何知道图片的大小和类型
  3. 无法确认调用函数:Imagecreatefrompng/jpeg……
  4. 可以独处图片的宽和高
  5.  
  6. 相当于宽高是已知的
  7. 一个重要的函数getimagesize()
  8. */
  9.  
  10. /*
  11. 想操作图片
  12. 先把图片的大小,类型信息得到
  13.  
  14. 水印:就是把指定的水印复制到目标上,并加透明效果
  15.  
  16. 缩略图:就是把大图片复制到小尺寸画面上
  17.  
  18. */
  19.  
  20. class ImageTool{
  21.  
  22. //imageinfo 分析图片的信息
  23. //return array()
  24. public static function imageInfo($image){
  25. //判断图片是否存在
  26. if(!file_exists($image)){
  27. return false;
  28.  
  29. }
  30. $info = getimagesize($image);
  31. if($info == false){
  32. return false;
  33. }
  34.  
  35. //此时info分析出来是一个数组
  36. $img['width'] = $info[0];
  37. $img['height'] = $info[1];
  38. //分析图片的后缀
  39. $img['ext'] = substr($info['mime'],strpos($info['mime'],'/')+1);
  40.  
  41. return $img;
  42. }
  43.  
  44. /*
  45. 加水印
  46. string $dst 待操作图片
  47. $water 水印小图
  48. $save 不填,则默认替换原始图
  49. $alpha 透明度
  50. $pos 水印图放的位置1234,顺时针
  51. */
  52. public static function water($dst,$water,$save=NULL,$pos=2,$alpha=50){
  53. //先保证两个图片存在
  54. if(!file_exists($dst) || !file_exists($water)){
  55. return false;
  56. }
  57.  
  58. //1.保证水印不能比待操作图片还大
  59. $dinfo = self::imageInfo($dst);
  60. $winfo = self::imageInfo($water);
  61.  
  62. //判断
  63. if($winfo['height'] > $dinfo['height'] || $winfo['width'] > $dinfo['width']){
  64. return false;
  65. }
  66.  
  67. //两张图,读到画布上,但是图片可能是png,可能是jpeg,用什么函数来读
  68. $dfunc = 'imagecreatefrom' .$dinfo['ext'];
  69. $wfunc = 'imagecreatefrom' .$winfo['ext'];
  70.  
  71. if(!function_exists($dfunc) || !function_exists($wfunc)){
  72. return false;
  73. }
  74.  
  75. //动态加载函数来创建画布
  76. $dim = $dfunc($dst); //创建待操作的画布
  77. $wim = $wfunc($water); //创建水印画布
  78.  
  79. //根据水印的位置,计算粘贴的坐标
  80. switch($pos){
  81. case 0; //左上角
  82. $posx = 0;
  83. $posy = 0;
  84. break;
  85.  
  86. case 1; //右上角
  87. $posx = $dinfo['width'] - $winfo['width'];
  88. $posy = 0;
  89. break;
  90.  
  91. case 2; //左下角
  92. $posx = 0;
  93. $posy = $dinfo['height'] - $winfo['height'];
  94. break;
  95.  
  96. default: //默认右下角
  97. $posx = $dinfo['width'] - $winfo['width'];
  98. $posy = $dinfo['height'] - $winfo['height'];
  99.  
  100. }
  101.  
  102. //加水印 在什么位置?
  103. // 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 )
  104.  
  105. imagecopymerge($dim,$wim,$posx,$posy,0,0,$winfo['width'],$winfo['height'],$alpha);
  106.  
  107. if(!$save){
  108.  
  109. $save=$dst;
  110. unlink($dst); //删除原图
  111. }
  112.  
  113. //保存图片
  114. $createfunc = 'image' . $dinfo['ext'];
  115. $createfunc($dim,$save);
  116.  
  117. //销毁图片
  118. imagedestroy($dim);
  119. imagedestroy($wim);
  120.  
  121. return true;
  122. }
  123.  
  124. /*
  125. thumb 生成缩略图
  126. 等比例缩放,两边留白
  127. */
  128. public static function thumb($dst,$save=NULL,$width=200,$height=200){
  129. //首先判断待处理的图片是否存在
  130. $dinfo = self::imageInfo($dst);
  131. if($dinfo == false){
  132. return false;
  133. }
  134.  
  135. //计算缩放比例
  136. $calc = min($width/$dinfo['width'],$height/$dinfo['height']);
  137.  
  138. //创建原始图的画布
  139. $dfunc = 'imagecreatefrom'.$dinfo['ext'];
  140. $dim = $dfunc($dst);
  141.  
  142. //创建缩略图画布
  143. $tim = imagecreatetruecolor($width,$height);
  144.  
  145. //创建白色填充缩略图画布
  146. $white = imagecolorallocate($tim,255,255,255);
  147.  
  148. //填充缩略画布
  149. imagefill($tim,0,0,$white);
  150.  
  151. //复制并缩略
  152. $dwidth = (int)$dinfo['width']*$calc;
  153. $dheight = (int)$dinfo['height']*$calc;
  154.  
  155. $paddingx = ($width - $dwidth) / 2;
  156. $paddingy = ($height - $dheight) /2;
  157.  
  158. imagecopyresampled($tim,$dim,$paddingx,$paddingy,0,0,$dwidth,$dheight,$dinfo['width'],$dinfo['height']);
  159.  
  160. //保存图片
  161. if(!$save){
  162. $save = $dst;
  163. unlink($dst);
  164. }
  165. $createfun = 'image'.$dinfo['ext'];
  166. $createfun($tim,$save);
  167.  
  168. imagedestroy($dim);
  169. imagedestroy($tim);
  170.  
  171. return true;
  172.  
  173. }

调用传参:

  1. //调用传参 加水印
  2. echo ImageTool::water('原图片地址','加水印图片地址','生成图片')?'ok':false;
  1. //调用 缩略图
  2. 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. UILabel的使用方法

    UILabel 就是一个显示文字的控件,可以设置文字的各种属性. 构造方法:     //通过设置Label的边框来初始化UILabel     labelOfSlider = [[UILabelal ...

  2. octopress的一些总结

    1.编辑_config.yml 的description时,不能使用tab键 2.修改主题‘MediumFox’  description 和 文章展示的宽度,修改文件home_landing_row ...

  3. hdoj 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心部分背包】

    悼念512汶川大地震遇难同胞——老人是真饿了 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  4. poj 1328 Radar Installation【贪心区间选点】

    Radar Installation Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other) ...

  5. NewSQL——优化的SQL存储引擎(TokuDB, MemSQL)+?

    NewSQL 是对各种新的可扩展/高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性. NewSQL 是指这样一类新式的关系型数据库 ...

  6. maven tomcat1.7环境下构建javaweb 项目

    tomcat用户权限设置 在tomcat安装路径\conf目录下tomcat-users.xml添加: <role rolename="admin-gui"/> < ...

  7. Qt之遍历文件夹(经典详解)

    关于Qt操作文件夹.文件的知识用途较多,比如遍历下一层乃至所有子孙文件.文件夹,获取它们的一些信息(大小.类型.最后更改时间等).当然,也可以进行级联删除.     首先看简单的: 一.Qt遍历文件夹 ...

  8. 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在他的 ...

  9. Spring DI模式 小样例

           今儿跟同事讨论起来spring早期的,通过大篇幅xml的配置演变到今天annotation的过程,然后随手写了个小样例,感觉还不错,贴到这里留个纪念. 样例就是用JAVA API的方式, ...

  10. xslt语法之---基础语法

    1. XSLT常用元素: 1.1 <xsl:template>:创建模板     Match属性的作用是使模板和XML元素相关联 <xsl:template match=" ...