php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)


Posted in PHP onDecember 02, 2010

废话不说了,贴代码:

<?php 
/************************************ 
//函数: watermark($bigimg, $smallimg, $coord = 1) 
//作用: 添加水印 
//参数: 
$bigimg 必选。大图片--要加上水印的图片 
$smallimg 必选。小图片 
$coord 可选。水印在大图中的位置, 
1 左上角; 2 右上角; 3 右下角; 4 左下角; 5 中间 
//示例: watermark('datu.png', 'xiaotu.png', 3); //给datu.png打上水印,水印位置在右下角 
*************************************/ 
function watermark($bigimg, $smallimg, $coord = 1){ 
//载入两张图片,并转成php识别的编码格式, 
//等同于 imagecreate 函数,只不过这里创建的不是一个空图片。 
$bi = getimagesize($bigimg); 
switch($bi[2]){ 
case 1: 
$im1 = imagecreatefromgif($bigimg);break; 
case 2; 
$im1 = imagecreatefromjpeg($bigimg);break; 
case 3; 
$im1 = imagecreatefrompng($bigimg);break; 
} 
$si = getimagesize($smallimg); 
switch($si[2]){ 
case 1: 
$im2 = imagecreatefromgif($smallimg);break; 
case 2; 
$im2 = imagecreatefromjpeg($smallimg);break; 
case 3; 
$im2 = imagecreatefrompng($smallimg);break; 
} 
// 创建水印--原理:复制小图到大图上。这里注意坐标值的计算 
switch($coord){ 
case 1: 
imagecopy ( $im1, $im2, 0, 0, 0, 0, $si[0], $si[1] ); break; 
case 2: 
imagecopy ( $im1, $im2, $bi[0]-$si[0], 0, 0, 0, $si[0], $si[1] ); break; 
case 3: 
imagecopy ( $im1, $im2, $bi[0]-$si[0], $bi[1]-$si[1], 0, 0, $si[0], $si[1] ); break; 
case 4: 
imagecopy ( $im1, $im2, 0, $bi[1]-$si[1], 0, 0, $si[0], $si[1] ); break; 
case 5: 
imagecopy ( $im1, $im2, ($bi[0]-$si[0])/2, ($bi[1]-$si[1])/2, 0, 0, $si[0], $si[1] ); break; 
} 
//根据后缀名生成不同格式的图片文件 
switch($bi[2]){ 
case 1: 
imagegif($im1);break; 
case 2; 
imagejpeg($im1);break; 
case 3; 
imagepng($im1);break; 
} 
imagedestroy($im1); 
} 
/************************************************ 
//函数: thumbnail($srcimg, $multiple) 
//作用: 生成一张缩略图 
//参数: 
// $srcimg 必选。源图片文件名 
// $multiple 可选。缩略倍数,默认为2倍,即缩小为原来的1/2 
//注意: 只支持gif、jpg、png的格式图片。 
//示例: thumbnail('我的图片.jpg', 5); 
*************************************************/ 
function thumbnail($srcimg, $multiple = 2){ 
//载入图片并保存其信息到数组 
$srcimg_arr = getimagesize($srcimg); 
//计算缩略倍数 
$thumb_width = $srcimg_arr[0] / $multiple; 
$thumb_height = $srcimg_arr[1] / $multiple; 
//判断:要建立什么格式的图片(转成php识别的编码) 
switch($srcimg_arr[2]){ 
case 1: 
$im = imagecreatefromgif($srcimg);break; 
case 2; 
$im = imagecreatefromjpeg($srcimg);break; 
case 3; 
$im = imagecreatefrompng($srcimg);break; 
} 
//开始缩略操作 
$thumb = imagecreatetruecolor($thumb_width, $thumb_height); 
imagecopyresized($thumb, $im, 0, 0, 0 ,0, $thumb_width, $thumb_height, $srcimg_arr[0], $srcimg_arr[1]); 
switch($srcimg_arr[2]){ 
case 1: 
imagegif($thumb); break; 
case 2; 
imagejpeg($thumb); break; 
case 3; 
imagepng($thumb); break; 
} 
imagepng($thumb); 
imagedestroy($thumb); 
} 
//测试 时不要同时使用这两个函数。 
//watermark('datu.png','xiaotu.png',5); 
thumbnail('abc.png',3); 
?>
PHP 相关文章推荐
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
php缓存技术详细总结
Aug 07 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
php利用gd库为图片添加水印
Nov 09 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
PHP中Trait及其应用详解
Feb 14 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
php小偷相关截取函数备忘
Nov 28 #PHP
php与paypal整合方法
Nov 28 #PHP
网站用php实现paypal整合方法
Nov 28 #PHP
paypal即时到账php实现代码
Nov 28 #PHP
解析PayPal支付接口的PHP开发方式
Nov 28 #PHP
php购物网站支付paypal使用方法
Nov 28 #PHP
IP攻击升级,程序改进以对付新的攻击
Nov 23 #PHP
You might like
如何给phpadmin一个保护
2006/10/09 PHP
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
PHP中实现进程间通讯
2006/10/09 PHP
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
javascript的事件描述
2006/09/08 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python中使用序列的方法
2015/08/03 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
pygame实现打字游戏
2021/02/19 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
店长岗位职责
2013/11/21 职场文书
群众路线领导对照材料
2014/08/23 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
学生退学证明
2015/06/23 职场文书
九年级数学教学反思
2016/02/17 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis