php 图片处理类,缩略,水印
php 图片处理类,缩略,水印
class Image {
/**
* @var string $fileName 文件名
* @access private
*/
private $fileName = '';
/**
* @var gd resource $imageResource 原图像
* @access private
*/
private $imageResource = NULL;
/**
* @var int $imageWidth 原图像宽
* @access private
*/
private $imageWidth = NULL;
/**
* @var int $imageHeight 原图像高
* @access private
*/
private $imageHeight = NULL;
/**
* @var int $imageType 原图像类型
* @access private
*/
private $imageType = NULL;
/**
* @var int $newResource 新图像
* @access private
*/
private $newResource = NULL;
/**
* @var int $newResType 新图像类型
* @access private
*/
private $newResType = NULL;
/**
* 构造函数
* @param string $fileName 文件名
*/
public function __construct($fileName = NULL) {
$this->fileName = $fileName;
if ($this->fileName) {
$this->getSrcImageInfo();
}
}
/**
* 取源图像信息
* @access private
* @return void
*/
private function getSrcImageInfo() {
$info = $this->getImageInfo();
$this->imageWidth = $info[0];
$this->imageHeight = $info[1];
$this->imageType = $info[2];
}
/**
* 取图像信息
* @param string $fileName 文件名
* @access private
* @return array
*/
private function getImageInfo($fileName = NULL) {
if ($fileName==NULL) {
$fileName = $this->fileName;
}
$info = getimagesize($fileName);
return $info;
}
/**
* 创建源图像GD 资源
* @access private
* @return void
*/
private function createSrcImage () {
$this->imageResource = $this->createImageFromFile();
}
/**
* 跟据文件创建图像GD 资源
* @param string $fileName 文件名
* @return gd resource
*/
public function createImageFromFile($fileName = NULL)
{
if (!$fileName) {
$fileName = $this->fileName;
$imgType = $this->imageType;
}
if (!is_readable($fileName) || !file_exists($fileName)) {
throw new Exception('Unable to open file "' . $fileName . '"');
}
if (!$imgType) {
$imageInfo = $this->getImageInfo($fileName);
$imgType = $imageInfo[2];
}
switch ($imgType) {
case IMAGETYPE_GIF:
$tempResource = imagecreatefromgif($fileName);
break;
case IMAGETYPE_JPEG:
$tempResource = imagecreatefromjpeg($fileName);
break;
case IMAGETYPE_PNG:
$tempResource = imagecreatefrompng($fileName);
break;
case IMAGETYPE_WBMP:
$tempResource = imagecreatefromwbmp($fileName);
break;
case IMAGETYPE_XBM:
$tempResource = imagecreatefromxbm($fileName);
break;
default:
throw new Exception('错误的图片格式,或图片有问
题!');
}
return $tempResource;
}
/**
* 改变图像大小
* @param int $width 宽
* @param int $height 高
* @param string $flag 按什么方式改变 0=长宽转换成参数指定的 1=按比
例缩放,长宽约束在参数指定内,2=以宽为约束缩放,3=以高为约束缩放
* @return string
*/
public function resizeImage($width, $height, $flag=1) {
global $cfg;
$widthRatio = $width/$this->imageWidth;
$heightRatio = $height/$this->imageHeight;
switch ($flag) {
case 1:
if ($this->imageHeight < $height && $this-
>imageWidth < $width) {
$endWidth = $this->imageWidth;
$endHeight = $this->imageHeight;
//return;
} elseif (($this->imageHeight * $widthRatio)
>$height) {
$endWidth = ceil($this->imageWidth *
$heightRatio);
$endHeight = $height;
} else {
$endWidth = $width;
$endHeight = ceil($this->imageHeight *
$widthRatio);
}
break;
case 2:
$endWidth = $width;
$endHeight = ceil($this->imageHeight * $widthRatio);
break;
case 3:
$endWidth = ceil($this->imageWidth * $heightRatio);
$endHeight = $height;
break;
case 4:
$endWidth2 = $width;
$endHeight2 = $height;
if ($this->imageHeight < $height && $this-
>imageWidth < $width) {
$endWidth = $this->imageWidth;
$endHeight = $this->imageHeight;
//return;
} elseif (($this->imageHeight * $widthRatio)
<$height) {
$endWidth = ceil($this->imageWidth *
$heightRatio);
$endHeight = $height;
} else {
$endWidth = $width;
$endHeight = ceil($this->imageHeight *
$widthRatio);
}
break;
case 5:
$endWidth2 = $width;
$endHeight2 = $height;
if ($this->imageHeight > $height && $this-
>imageWidth > $width) {
//都大
$ratio = max($this->imageHeight/
$height,$this->imageWidth/$width);
}elseif ($this->imageHeight > $height){
$ratio = $this->imageHeight/$height;
}elseif ( $this->imageWidth > $width){
$ratio =$this->imageWidth/$width;
}else{
$ratio =1;
}
$endWidth = $this->imageWidth / $ratio;
$endHeight = $this->imageHeight / $ratio;
break;
default:
$endWidth = $width;
$endHeight = $height;
break;
}
if ($this->imageResource==NULL) {
$this->createSrcImage();
}
if($flag == 5){
//直接缩略
$this->newResource = imagecreatefromjpeg($cfg
['path']['data'].'blank_thumb.jpg');
}elseif ($flag==4) {
$this->newResource = imagecreatetruecolor
($endWidth2,$endHeight2);
} else {
$this->newResource = imagecreatetruecolor
($endWidth,$endHeight);
}
$this->newResType = $this->imageType;
if($flag == 5){
$dest_x = ($width-$endWidth)/2;
$dest_y = ($height-$endHeight)/2;
imagecopyresampled($this->newResource, $this-
>imageResource, $dest_x, $dest_y, 0, 0, $endWidth, $endHeight,$this-
>imageWidth,$this->imageHeight);
}else{
imagecopyresampled($this->newResource, $this-
>imageResource, 0, 0, 0, 0, $endWidth, $endHeight,$this->imageWidth,$this-
>imageHeight);
}
}
/**
* 给图像加水印
* @param string $waterContent 水印内容可以是图像文件名,也可以是文
字
* @param int $pos 位置0-9可以是数组
* @param int $textFont 字体大字,当水印内容是文字时有效
* @param string $textColor 文字颜色,当水印内容是文字时有效
* @return string
*/
public function waterMark($waterContent, $pos = 0, $textFont=5,
$textColor="#ffffff") {
$isWaterImage = file_exists($waterContent);
if ($isWaterImage) {
$waterImgRes = $this->createImageFromFile
($waterContent);
$waterImgInfo = $this->getImageInfo($waterContent);
$waterWidth = $waterImgInfo[0];
$waterHeight = $waterImgInfo[1];
} else {
$waterText = $waterContent;
//$temp = @imagettfbbox(ceil
($textFont*2.5),0,"./cour.ttf",$waterContent);
if ($temp) {
$waterWidth = $temp[2]-$temp[6];
$waterHeight = $temp[3]-$temp[7];
} else {
$waterWidth = 100;
$waterHeight = 12;
}
}
if ($this->imageResource==NULL) {
$this->createSrcImage();
}
switch($pos)
{
case 0://随机
$posX = rand(0,($this->imageWidth - $waterWidth));
$posY = rand(0,($this->imageHeight - $waterHeight));
break;
case 1://1为顶端居左
$posX = 0;
$posY = 0;
break;
case 2://2为顶端居中
$posX = ($this->imageWidth - $waterWidth) / 2;
$posY = 0;
break;
case 3://3为顶端居右
$posX = $this->imageWidth - $waterWidth;
$posY = 0;
break;
case 4://4为中部居左
$posX = 0;
$posY = ($this->imageHeight - $waterHeight) / 2;
break;
case 5://5为中部居中
$posX = ($this->imageWidth - $waterWidth) / 2;
$posY = ($this->imageHeight - $waterHeight) / 2;
break;
case 6://6为中部居右
$posX = $this->imageWidth - $waterWidth;
$posY = ($this->imageHeight - $waterHeight) / 2;
break;
case 7://7为底端居左
$posX = 0;
$posY = $this->imageHeight - $waterHeight;
break;
case 8://8为底端居中
$posX = ($this->imageWidth - $waterWidth) / 2;
$posY = $this->imageHeight - $waterHeight;
break;
case 9://9为底端居右
$posX = $this->imageWidth - $waterWidth-20;
$posY = $this->imageHeight - $waterHeight-10;
break;
default://随机
$posX = rand(0,($this->imageWidth - $waterWidth));
$posY = rand(0,($this->imageHeight - $waterHeight));
break;
}
imagealphablending($this->imageResource, true);
if($isWaterImage) {
imagecopy($this->imageResource, $waterImgRes, $posX,
$posY, 0, 0, $waterWidth,$waterHeight);
} else {
$R = hexdec(substr($textColor,1,2));
$G = hexdec(substr($textColor,3,2));
$B = hexdec(substr($textColor,5));
$textColor = imagecolorallocate($this-
>imageResource, $R, $G, $B);
imagestring ($this->imageResource, $textFont, $posX,
$posY, $waterText, $textColor);
}
$this->newResource = $this->imageResource;
$this->newResType = $this->imageType;
}
/**
* 生成验证码图片
* @param int $width 宽
* @param string $height 高
* @param int $length 长度
* @param int $validType 0=数字,1=字母,2=数字加字母
* @param string $textColor 文字颜色
* @param string $backgroundColor 背景颜色
* @return void
*/
public function imageValidate($width, $height, $length = 4,
$validType = 1, $textColor = '#000000', $backgroundColor = '#ffffff') {
if ($validType==1) {
//$validString =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
//$validLength = 52;
//no i no l
$validString =
'abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ';
$validLength = 48;
} elseif ($validType==2) {
//$validString =
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
//$validLength = 62;
//no i no l no 1
$validString =
'023456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ';
$validLength = 57;
} else {
$validString = '0123456789';
$validLength = 10;
}
srand((int)time());
$valid = '';
for ($i=0; $i<$length; $i++) {
$valid .= $validString{rand(0, $validLength-1)};
}
$this->newResource = imagecreate($width,$height);
$bgR = hexdec(substr($backgroundColor,1,2));
$bgG = hexdec(substr($backgroundColor,3,2));
$bgB = hexdec(substr($backgroundColor,5,2));
$backgroundColor = imagecolorallocate($this->newResource,
$bgR, $bgG, $bgB);
$tR = hexdec(substr($textColor,1,2));
$tG = hexdec(substr($textColor,3,2));
$tB = hexdec(substr($textColor,5,2));
$textColor = imagecolorallocate($this->newResource, $tR,
$tG, $tB);
for ($i=0;$i<strlen($valid);$i++){
imagestring($this->newResource,5,$i*$width/
$length+3,2, $valid[$i],$textColor);
}
$this->newResType = IMAGETYPE_JPEG;
return $valid;
}
/**
* 显示输出图像
* @return void
*/
public function display($fileName='', $quality=60) {
$imgType = $this->newResType;
$imageSrc = $this->newResource;
switch ($imgType) {
case IMAGETYPE_GIF:
if ($fileName=='') {
header('Content-type: image/gif');
}
imagegif($imageSrc, $fileName, $quality);
break;
case IMAGETYPE_JPEG:
if ($fileName=='') {
header('Content-type: image/jpeg');
}
imagejpeg($imageSrc, $fileName, $quality);
break;
case IMAGETYPE_PNG:
if ($fileName=='') {
header('Content-type: image/png');
imagepng($imageSrc);
} else {
imagepng($imageSrc, $fileName);
}
break;
case IMAGETYPE_WBMP:
if ($fileName=='') {
header('Content-type: image/wbmp');
}
imagewbmp($imageSrc, $fileName, $quality);
break;
case IMAGETYPE_XBM:
if ($fileName=='') {
header('Content-type: image/xbm');
}
imagexbm($imageSrc, $fileName, $quality);
break;
default:
throw new Exception('Unsupport image type');
}
imagedestroy($imageSrc);
}
/**
* 保存图像
* @param int $fileNameType 文件名类型 0使用原文件名,1使用指定的文
件名,2在原文件名加上后缀,3产生随机文件名
* @param string $folder 文件夹路径 为空为与原文件相同
* @param string $param 参数$fileNameType为2时为文件名加后缀
* @return void
*/
public function save($fileNameType = 0, $folder = NULL, $param =
'_miniature') {
if ($folder==NULL) {
$folder = dirname($this-
>fileName).DIRECTORY_SEPARATOR;
}
$fileExtName = FileSystem::fileExt($this->fileName, true);
$fileBesicName = FileSystem::getBasicName($this->fileName,
false);
switch ($fileNameType) {
case 1:
//$newFileName = $folder.$param;
$newFileName = $folder.basename($this-
>fileName);
//var_dump($newFileName);
break;
case 2:
$newFileName =
$folder.$fileBesicName.$param.$fileExtName;
break;
case 3:
$tmp = date('YmdHis');
$fileBesicName = $tmp;
$i = 0;
while (file_exists
($folder.$fileBesicName.$fileExtName)) {
$fileBesicName = $tmp.$i;
$i++;
}
$newFileName =
$folder.$fileBesicName.$fileExtName;
break;
default:
$newFileName = $this->fileName;
break;
}
$this->display($newFileName);
return $newFileName;
}
/**
* 剪切出选定区域
*
* @param string $srcimgurl 原图
* @param string $endimgurl 处理过的图
* @param int $x 坐标原点X
* @param int $y 坐标原点Y
* @param int $endimg_w 最终图宽
* @param int $endimg_h 最终图高
* @param int $border_w 末坐标X
* @param int $border_h 末坐标Y
* @param int $scale 原图缩放情况百分比
* @param int $fix 是否自动取值
*/
public function cutimg
($srcimgurl,$endimgurl,$x,$y,$endimg_w,$endimg_h,$border_w,$border_h,$scale=
100,$fix=0){
$path = dirname ($endimgurl);
if (!is_dir($path)) {
if(!@mkdir ($path, 0777)){
die ("{$path} 此目录不能创建,文件创建失败");
}
}
$ground_info = getimagesize($srcimgurl);
switch($ground_info[2]){
case 1:$im = imagecreatefromgif($srcimgurl);break;
case 2:$im = imagecreatefromjpeg($srcimgurl);break;
case 3:$im = imagecreatefrompng($srcimgurl);break;
default:die("图片格式不允许$srcimgurl");
}
if($fix){//方便截取头像的一部分
if($ground_info[0]<$ground_info[1]){
$border_w=$ground_info[0];
$border_h=$endimg_h*$ground_info[0]/
$endimg_w;
}elseif($ground_info[0]>$ground_info[1]){
$border_h=$ground_info[1];
$border_w=$endimg_w*$ground_info[1]/
$endimg_h;
}else{
$border_w=$ground_info[0];
$border_h=$ground_info[1];
}
}
$newim = imagecreatetruecolor($endimg_w, $endimg_h);
$x=($x*100)/$scale;
$y=($y*100)/$scale;
$border_width=($border_w*100)/$scale;
$border_height=($border_h*100)/$scale;
imagecopyresampled($newim, $im, 0,0, $x,$y, $endimg_w,
$endimg_h, $border_width, $border_height );
if(function_exists("imagegif")){
switch($ground_info[2]){
case 1:imagegif($newim,$endimgurl);break;
case 2:imagejpeg($newim,$endimgurl);break;
case 3:imagepng($newim,$endimgurl);break;
default:die("errorMsg");
}
}elseif(function_exists("imagejpeg")){
imagejpeg($newim,$endimgurl);
}else{
imagepng($newim,$endimgurl);
}
imagedestroy ($newim);
imagedestroy ($im);
}
}
php日期所在月的天数
public function daysOfMonth ($year=NULL,$month=NULL) {
if ($year===NULL) {
$year = $this->getPart('yy');
}
if ($month===NULL) {
$month = $this->getPart('mm');
}
if ($month==2)
{
if (($year % 4 == 0 && $year % 100 != 0) || $year %
400 == 0)
$result = 29;
else
$result = 28;
}
elseif ($month == 4 || $month == 6 || $month == 9 || $month
== 11)
$result = 30;
else
$result = 31;
return $result;
}
image2wbmp
(PHP 4中“= 4.0.5,PHP 5中)
image2wbmp - 输出图像浏览器或文件
报告错误描述
布尔image2wbmp($oimg[,$filename[,soruce]])
image2wbmp()输出或保存一个给定的图像WBMP版本。
报告错误参数
图片
图像资源,通过创造的图像功能,如,一返回imagecreatetruecolor()。
文件名
路径保存的文件。如果没有给出原始图像流将被直接输出。
开始
阈值介于0和255(含)。
报告错误返回值
返回TRUE,成功或失败则返回FALSE。
报告错误的例子
<?php
$file = 'php.png';
$image = imagecreatefrompng($file);
header('Content-type: ' . image_type_to_mime_type(IMAGETYPE_WBMP));
image2wbmp($image); // output the stream directly
imagedestroy($image);
?>
php getimagesize
getimagesize是读取图片相关信息,返回一个具有四个单元的数组。索引 0 包含图像宽度的像素值,索引 1 包含图像高度的像素值。索引 2 是图像类型的标
<?php
$size = getimagesize($filename);
$fp = fopen($filename, "rb");
if ($size && $fp) {
header("Content-type: {$size['mime']}");
fpassthru($fp);
exit;
} else {
// error
}
?>
#2 getimagesize() example
<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img src="img/flag.jpg" $attr alt="getimagesize() example" />";
?>
Example #3 getimagesize (URL)
<?php
$size = getimagesize("http://www.example.com/gifs/logo.gif");
$size = getimagesize("http://www.example.com/gifs/lo%20go.gif");
?>
Example #4 getimagesize() returning IPTC
<?php
$size = getimagesize("testimg.jpg", $info);
if (isset($info["APP13"])) {
$iptc = iptcparse($info["APP13"]);
var_dump($iptc);
}
?>
会员数据导入uchome程序实例
<?php
try {
$uc_db = new DataSource(UC_DBHOST , UC_DBUSER , UC_DBPW , UC_DBNAME,
'mysql', true );
$uc_query = new DbQueryForMysql($uc_db);
} catch (DbException $e) {
// 数据库出错处理处
exit('Database support needed');
}
$sql ="select * from 111cn_member ";
$Db = new Db();
$array = $Db->query($Db,0);
foreach( $array as $_v => $value)
{
$data = $Db->query("SELECT * FROM ".UC_DBTABLEPRE."members WHERE
username='".$rs['username']."'");
if($data) {
$ucuserlist .="username:".$rs['username']." email:".$rs
['email']."rn";
} else {
$salt = substr(uniqid(rand()), -6);
$password = md5($rs['passwd'].$salt);
$Db->query("INSERT INTO ".UC_DBTABLEPRE."members SET uid=
'".$rs['id']."', username='".$rs['username']."', password='$password',
email='".$rs['email']."', lastlogintime ='".$rs['last_login']."',
regdate='".$rs['add_time']."', salt='$salt'");
$Db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET
uid='".$rs['id']."'");
}
}
exit("用户导入Ucenter完成");
?>
相关文章
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
- 这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
- Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
BAT批处理判断服务是否正常运行的方法(批处理命令综合应用)
批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。这篇文章主要介绍了BAT批处理判断服务是否正常运行(批处理命令综合应用),需要的朋友可以参考下...2020-06-30- 图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
- file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
- 共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
- 这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
- 这篇文章主要介绍了C#多线程中的异常处理操作,涉及C#多线程及异常的捕获、处理等相关操作技巧,需要的朋友可以参考下...2020-06-25
- PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
C#中图片旋转和翻转(RotateFlipType)用法分析
这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25- ps软件是现在很多人比较喜欢的,有着非常不错的使用效果,这次文章就给大家介绍下ps怎么制作图片阴影效果,还不知道制作方法的赶紧来看看。 ps图片阴影效果怎么做方法/...2017-07-06
- 这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29