时间:2021-07-01 10:21:17 帮助过:11人阅读
php图片处理的知识内容
upload_image.php:
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>图片上传页title>
<style type="text/css">
.file-box{ position:relative;width:340px}
.txt{ height:22px; border:1px solid #cdcdcd; width:200px;border-right:none;}
.btn{ background-color:#FFF; border:1px solid #CDCDCD;height:26px; width:70px;}
.file{ position:absolute; top:0; right:80px; height:24px; filter:alpha(opacity:0);opacity: 0;width:260px }
style>
<script type="text/javascript" >
//JS获取路径 ---成功
function change()
{
var pic=document.getElementById('pic');
var file=document.getElementById('fileField');
pic.src=file.value;
if(file.files){
if(file.files.item(0)){
//src = window.URL.createObjectURL(fileObj.files[0]);
url=window.URL.createObjectURL(file.files.item(0));
document.getElementById('textfield').value = pic.src ;
pic.src=url;
}
}
}
script>
head>
<body>
<form action="check_image.php" method="post" enctype="multipart/form-data">
<table border="1">
<tr>
<td>上传人名称:td>
<td><input type="text" class='txt' name="username" />td>
tr>
<tr>
<td>*上传图片:td>
<td><div class="file-box"><input type='text' name='textfield' id='textfield' class='txt' /><input type='button' class='btn' value='浏览...' /><br />
<input type="file" name="uploadfile" class="file" id="fileField" size="28" onchange="change();" />
<input type="hidden" id="theFilePath" name="theFilePath" value="">
div>
td>
tr>
<tr>
<td colspan="2">
<small><em> * 可接受的图像格式:GIF,JPG、JPEG和PNG。上传后图片会变为1280X960大小。em>small>
td>
tr>
<tr>
<td>图片标题:td>
<td><input type="text" class='txt' name="caption"/>td>
tr>
<tr>
<td colspan="2" style="text-align:center;">
<input type="submit" name="submit" value="Upload" class='btn' />
td>
tr>
table>
<img src="" name="pic" id="pic" /> <br />
form>
body>
html>
check_image.php 集合图片上传,MySQL数据库保存,图片放大至1280X960,图片加文字,图片PS处理,图片缩略图,图片打LOGO水印。功能集合强大。
php //session session_start(); if($_POST['submit'] == 'Upload') { if($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) { switch($_FILES['uploadfile']['error']) { case UPLOAD_ERR_INI_SIZE: //其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值 die('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值'); break; case UPLOAD_ERR_FORM_SIZE: //其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值 die('上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值'); break; case UPLOAD_ERR_PARTIAL: //其值为 3,文件只有部分被上传 die('文件只有部分被上传'); break; case UPLOAD_ERR_NO_FILE: //其值为 4,没有文件被上传 die('没有文件被上传'); break; case UPLOAD_ERR_NO_TMP_DIR: //其值为 6,找不到临时文件夹 die('找不到临时文件夹'); break; case UPLOAD_ERR_CANT_WRITE: //其值为 7,文件写入失败 die('文件写入失败'); break; case UPLOAD_ERR_EXTENSION: //其他异常 die('其他异常'); break; } } //判断图片的后缀 switch($type) { case IMAGETYPE_GIF: $ext = '.gif'; break; case IMAGETYPE_JPEG: $ext = '.jpg'; break; case IMAGETYPE_PNG: $ext = '.png'; break; default : die('您上传的文件不支持的文件类型。'); } //关键位置-取出文件后缀 $_SESSION['ext'] = $ext; } /* //改变图像的大小为1280x960的方法 function resizepic($imgsrc,$imagename,$toimgwidth,$toimgheigth) { //$imgsrc:图片路径 $imgname: 图片保存的名称 $toimgwidth: 图片最终的宽度 $toimgheigth: 图片最终的高度 $arr = getimagesize($imgsrc); $imgWidth = $toimgwidth; $imgHeigth = $toimgheigth; if($_SESSION['ext'] == '.jpg') { header('Content-Type:image/jpeg'); $imgSrc = imagecreatefromjpeg($imgsrc); } if($_SESSION['ext'] == '.png') { header('Content-Type:image/png'); $imgSrc = imagecreatefrompng($imgsrc); } if($_SESSION['ext'] == '.gif') { header('Content-Type:image/gif'); $imgSrc = imagecreatefromgif($imgsrc); } $image = imagecreatetruecolor($imgWidth, $imgHeigth); imagecopyresampled($image,$imgSrc,0,0,0,0,$imgWidth,$imgHeigth,$arr[0],$arr[1]); if($_SESSION['ext'] == '.jpg') { imagejpeg($image,$dir.'/'.$imagename); } if($_SESSION['ext'] == '.png') { imagepng($image,$dir.'/'.$imagename); } if($_SESSION['ext'] == '.gif') { imagegif($image,$dir.'/'.$imagename); } //销毁由url生成的图片 imagedestroy($image); } */ //创建moviesite数据库--MySQL $coon = mysql_connect("localhost","root","lifu") or die('不能连接到数据库'); if (!$coon) { die('无法连接: ' . mysql_error()); } if (mysql_query("CREATE DATABASE if not exists moviesite",$coon)) //如果没有就创建数据库 { echo "数据库创建成功
"; } else { echo "数据库创建错误: " . mysql_error(); } // 创建images表 mysql_select_db("moviesite", $coon); //如果没有就创建表 $sql = "CREATE TABLE if not exists images ( image_id int NOT NULL AUTO_INCREMENT, PRIMARY KEY(image_id), image_caption varchar(15), image_username varchar(15), image_filename varchar(15), image_date datetime )"; mysql_query($sql,$coon); mysql_close($coon); //修改图片效果 $db = mysql_connect('localhost','root','lifu') or die('不能连接到数据库'); mysql_select_db('moviesite',$db) or die(mysql_error($db)); //上传文件的路径 $dir = 'D:\phpStudy\WWW\loadimages\images'; //缩略图的路径 $thumbdir = 'D:\phpStudy\WWW\loadimages\images\thumbs'; //设置环境变量 putenv('GDFONTPATH='.'C:\Windows\Fonts'); $font = "C:\Windows\Fonts\arial.ttf"; //upload_image.php页面传递过来的参数,如果是上传图片 if($_POST['submit'] == 'Upload') { /*代码重复 if($_FILES['uploadfile']['error'] != UPLOAD_ERR_OK) { switch($_FILES['uploadfile']['error']) { case UPLOAD_ERR_INI_SIZE: //其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值 die('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值'); break; case UPLOAD_ERR_FORM_SIZE: //其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值 die('上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值'); break; case UPLOAD_ERR_PARTIAL: //其值为 3,文件只有部分被上传 die('文件只有部分被上传'); break; case UPLOAD_ERR_NO_FILE: //其值为 4,没有文件被上传 die('没有文件被上传'); break; case UPLOAD_ERR_NO_TMP_DIR: //其值为 6,找不到临时文件夹 die('找不到临时文件夹'); break; case UPLOAD_ERR_CANT_WRITE: //其值为 7,文件写入失败 die('文件写入失败'); break; case UPLOAD_ERR_EXTENSION: //其他异常 die('其他异常'); break; } } */ $image_caption = $_POST['caption']; $image_username = $_POST['username']; $image_date = date('Y-m-D'); /*getimagesize方法返回一个数组, $width : 索引 0 包含图像宽度的像素值, $height : 索引 1 包含图像高度的像素值, $type : 索引 2 是图像类型的标记: = GIF,2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, = TIFF(intel byte order),8 = TIFF(motorola byte order), = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM, $attr : 索引 3 是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG 标记 */ list($width,$height,$type,$attr) = getimagesize($_FILES['uploadfile']['tmp_name']); //imagecreatefromgXXX方法从一个url路径中创建一个新的图片 switch($type) { case IMAGETYPE_GIF: $image = imagecreatefromgif($_FILES['uploadfile']['tmp_name']) or die('你上传的文件是不支持的文件类型'); $ext = '.gif'; $array = getimagesize($_FILES['uploadfile']['tmp_name']); break; case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($_FILES['uploadfile']['tmp_name']) or die('你上传的文件是不支持的文件类型'); $ext = '.jpg'; $array = getimagesize($_FILES['uploadfile']['tmp_name']); break; case IMAGETYPE_PNG: $image = imagecreatefrompng($_FILES['uploadfile']['tmp_name']) or die('你上传的文件是不支持的文件类型'); $ext = '.png'; $array = getimagesize($_FILES['uploadfile']['tmp_name']); break; default : die('您上传的文件不支持的文件类型。'); } //将图片改为1280X960 //新建一个指定大小的真彩色图像big $big = imagecreatetruecolor(1280, 960); //重采样拷贝部分图像并调整大小为1280X960 imagecopyresampled($big, $image, 0, 0, 0, 0, 1280, 960, $array[0], $array[1]); $query = 'insert into images(image_caption,image_username,image_date) values ("'.$image_caption.'","'.$image_username.'",now())'; mysql_query($query , $db) or die(mysql_error($db)); $last_id = mysql_insert_id(); //用写入的id作为图片的名字,避免同名的文件存放在同一目录中 $imagename = $last_id.$ext; $image_id = $last_id; $query = 'update images set image_filename="'.$imagename.'" where image_id='.$last_id; mysql_query($query , $db) or die(mysql_error($db)); //有url指定的图片创建图片并保存到指定目录 switch($type) { case IMAGETYPE_GIF: imagegif($big,$dir.'/'.$imagename); break; case IMAGETYPE_JPEG: imagejpeg($big,$dir.'/'.$imagename); break; case IMAGETYPE_PNG: imagepng($big,$dir.'/'.$imagename); break; } //销毁由url生成的图片 imagedestroy($big); imagedestroy($image); } else //如果图片已经上传,则从数据库中取图片名字 { $query = 'select image_id,image_caption,image_username,image_date from images where image_id='.$_POST['id']; $result = mysql_query($query,$db) or die(mysql_error($db)); //将结果集转换成关联数据,再将关联数组的键名当作变量名,值作为变量的值。 extract(mysql_fetch_assoc($result)); list($width,$height,$type,$attr) = getimagesize($dir.'/'.$image_id.$_SESSION['ext']); } //如果是保存图片 if($_POST['submit'] == 'Save') { if(isset($_POST['id']) && ctype_digit($_POST['id']) && file_exists($dir.'/'.$_POST['id'].$_SESSION['ext'])) { if($_SESSION['ext'] == '.jpg') { $image = imagecreatefromjpeg($dir.'/'.$_POST['id'].$_SESSION['ext']); } if($_SESSION['ext'] == '.png') { $image = imagecreatefrompng($dir.'/'.$_POST['id'].$_SESSION['ext']); } if($_SESSION['ext'] == '.gif') { $image = imagecreatefromgif($dir.'/'.$_POST['id'].$_SESSION['ext']); } } else { die('指定的无效图像'); } $effect = (isset($_POST['effect'])) ? $_POST['effect'] : -1; switch($effect) { case IMG_FILTER_NEGATE: imagefilter($image , IMG_FILTER_NEGATE); //将图像中所有颜色反转 break; case IMG_FILTER_GRAYSCALE: imagefilter($image , IMG_FILTER_GRAYSCALE); //将图像转换为灰度的 break; case IMG_FILTER_EMBOSS: imagefilter($image , IMG_FILTER_EMBOSS); //使图像浮雕化 break; case IMG_FILTER_GAUSSIAN_BLUR: imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR); //用高斯算法模糊图像 break; } //图片指定位置打印文字 if(isset($_POST['emb_caption'])) { /* array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text ) $image 图像源 $size 字体大小 $angle 逆时针旋转角度 $fontfile 字体类型 $text 文本内容 */ imagettftext($image , 12 , 0 , 20 , 20 , 0 , $font , $image_caption); } //图片指定位置打LOGO if(isset($_POST['emb_logo'])) { //获取水印图片的尺寸并创建水印 list($wmk_width , $wmk_height) = getimagesize('images/logo.png'); //$x = ($width-$wmk_width) / 2; //$y = ($height-$wmk_height)/2; $x = $width-$wmk_width; $y = $height-$wmk_height; $wmk = imagecreatefrompng('images/logo.png'); //把水印图片和原图片合并在一起 /* 将 wmk 图像中坐标从 0,0 开始,宽度为 $wmk_width,高度为 $wmk_height 的一部分拷贝到 image 图像中坐标为 $x 和 $y 的位置上。 两图像将根据 pct=20 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。 */ imagecopymerge($image , $wmk , $x , $y , 0 , 0 , $wmk_width , $wmk_height , 20); //清除水印图片 imagedestroy($wmk); } //缩略图大小 $thumb_width = $width * 0.10; $thumb_height = $height * 0.10; //创建一个缩略图 $thumb = imagecreatetruecolor($thumb_width, $thumb_height); imagecopyresampled($thumb, $image, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height); //保存缩略图 if($_SESSION['ext'] == '.jpg') { imagejpeg($thumb, $thumbdir . '/' . $_POST['id'] . $_SESSION['ext'], 100); } if($_SESSION['ext'] == '.png') { imagepng($thumb, $thumbdir . '/' . $_POST['id'] . $_SESSION['ext']); } if($_SESSION['ext'] == '.gif') { imagegif($thumb, $thumbdir . '/' . $_POST['id'] . $_SESSION['ext']); } echo "修改好的缩略图:$_SESSION['ext']."' alt='' />
"; //清除缩略图 imagedestroy($thumb); //保存原图 if($_SESSION['ext'] == '.jpg') { imagejpeg($image , $dir.'/'.$_POST['id'].$_SESSION['ext'] , 100); } if($_SESSION['ext'] == '.png') { //压缩等级必须是0-9的png文件 imagepng($image , $dir.'/'.$_POST['id'].$_SESSION['ext']); } if($_SESSION['ext'] == '.gif') { imagegif($image , $dir.'/'.$_POST['id'].$_SESSION['ext']); } echo "修改好的大图:$_SESSION['ext']."' alt='' />
"; ?>你的图片在这! 你的图片被保存!
php } else { ?>你的图片在这! 这里是你上传到服务器上的图片:
php if($_POST['submit'] == 'Upload') { $imagename = 'images/'.$image_id.$_SESSION['ext']; } else { $imagename = 'image_effect.php?id='.$image_id.'&e='.$_POST['effect']; if(isset($_POST['emb_caption'])) { $imagename .= '&capt='.urlencode($image_caption); } if(isset($_POST['emb_logo'])) { $imagename .= '&logo=1'; } } ?> echo "src:".$imagename ; ?> as:echo "moviesite数据库images表第".$image_id ."行!" ;?> Height: echo $height;?> Widht: echo $width;?> Upload date: echo $image_date;?> 你可以从下面的选项列表中对你的图像应用一个特殊的效果。注:使用任何一个过滤器,保存一个图像 可以撤消
php } mysql_close($db); ?>
本来有一个Preview的,后来没弄了,但是代码还是给上 image_effect.php ,已经把Preview注释掉了。
php //上传文件的路径 $dir = 'D:\phpStudy\WWW\loadimages\images'; //设置环境变量 putenv('GDFONTPATH='.'C:\Windows\Fonts'); $font = "C:\Windows\Fonts\arial.ttf"; if(isset($_GET['id']) && ctype_digit($_GET['id']) && file_exists($dir.'/'.$_GET['id'].$_SESSION['ext'])) { $image = imagecreatefromjpeg($dir.'/'.$_GET['id'].$_SESSION['ext']); } else { die('invalid image specified'); } $effect = (isset($_GET['e'])) ? $_GET['e'] : -1; switch($effect) { case IMG_FILTER_NEGATE: imagefilter($image , IMG_FILTER_NEGATE); break; case IMG_FILTER_GRAYSCALE: imagefilter($image , IMG_FILTER_GRAYSCALE); break; case IMG_FILTER_EMBOSS: imagefilter($image , IMG_FILTER_EMBOSS); break; case IMG_FILTER_GAUSSIAN_BLUR: imagefilter($image , IMG_FILTER_GAUSSIAN_BLUR); break; } if(isset($_GET['capt'])) { //echo $_GET['capt']; imagettftext($image, 12, 0, 20, 20, 0, $font, $_GET['capt']); } if(isset($_GET['logo'])) { list($widht , $height) = getimagesize($dir.'/'.$_GET['id'].$_SESSION['ext']); list($wmk_width , $wmk_height) = getimagesize('images/logo.png'); $x = $width-$wmk_width; $y = $height-$wmk_height; $wmk = imagecreatefrompng('images/logo.png'); imagecopymerge($image , $wmk , $x , $y , 0 , 0 , $wmk_width , $wmk_height , 20); imagedestroy($wmk); } if($_SESSION['ext'] == '.jpg') { header('Content-Type:image/jpeg'); imagejpeg($image , '' , 100); } if($_SESSION['ext'] == '.png') { header('Content-Type:image/png'); imagepng($image , '' ); } if($_SESSION['ext'] == '.gif') { header('Content-Type:image/gif'); imagegif($image , '' ); } ?>
内容总结:
本人是自学的php,代码书写多有不规范之处,并且有些位置的代码有重复累赘。以后需要加强。
upload_image.php: 主要是 HTML+Javascritp+Css 没什么可说的,主要就 javascript 调用 window.URL.createObjectURL(fileObj) 方法。获取图片的相对路径,并做图片的展示。
check_image.php: 1、session 用于保存从 upload_image.php 传递过来的图片的后缀名。
2、数据库moviesite创建,images表的创建
$sql = "CREATE TABLE if not exists images ( image_id int NOT NULL AUTO_INCREMENT, PRIMARY KEY(image_id), image_caption varchar(15), image_username varchar(15), image_filename varchar(15), image_date datetime )";
3、使用 imagecreatetruecolor 和 imagecopyresampled 将图片大小调整为1280X960.然后将图片上传保存到指定位置。
//将图片改为1280X960 //新建一个指定大小的真彩色图像big $big = imagecreatetruecolor(1280, 960); //重采样拷贝部分图像并调整大小为1280X960 imagecopyresampled($big, $image, 0, 0, 0, 0, 1280, 960, $array[0], $array[1]);
4、如果图片已经上传,则从数据库中取图片名字
$query = 'select image_id,image_caption,image_username,image_date from images where image_id='.$_POST['id']; $result = mysql_query($query,$db) or die(mysql_error($db)); //将结果集转换成关联数据,再将关联数组的键名当作变量名,值作为变量的值。 extract(mysql_fetch_assoc($result)); list($width,$height,$type,$attr) = getimagesize($dir.'/'.$image_id.$_SESSION['ext']);
5、bool imagefilter ( resource $src_im
, int $filtertype
[, int $arg1
[, int $arg2
[, int $arg3
]]] ) 对图像使用过滤器 PS图片
imagefilter() 把过滤器 filtertype 应用到图像上,在需要时使用 arg1,arg2 和 arg3。
filtertype 可以是下列中的一个:
IMG_FILTER_NEGATE:将图像中所有颜色反转。
IMG_FILTER_GRAYSCALE:将图像转换为灰度的。
IMG_FILTER_BRIGHTNESS:改变图像的亮度。用 arg1 设定亮度级别。
IMG_FILTER_CONTRAST:改变图像的对比度。用 arg1 设定对比度级别。
IMG_FILTER_COLORIZE:与 IMG_FILTER_GRAYSCALE 类似,不过可以指定颜色。用 arg1,arg2 和 arg3 分别指定 red,blue 和 green。每种颜色范围是 0 到 255。
IMG_FILTER_EDGEDETECT:用边缘检测来突出图像的边缘。
IMG_FILTER_EMBOSS:使图像浮雕化。
IMG_FILTER_GAUSSIAN_BLUR:用高斯算法模糊图像。
IMG_FILTER_SELECTIVE_BLUR:模糊图像。
IMG_FILTER_MEAN_REMOVAL:用平均移除法来达到轮廓效果。
IMG_FILTER_SMOOTH:使图像更柔滑。用 arg1 设定柔滑级别。
6、图片加文字
//图片指定位置打印文字 if(isset($_POST['emb_caption'])) { /* array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text ) $image 图像源 $size 字体大小 $angle 逆时针旋转角度 $fontfile 字体类型 $text 文本内容 */ imagettftext($image , 12 , 0 , 20 , 20 , 0 , $font , $image_caption); }
7、图片打LOGO
//图片指定位置打LOGO if(isset($_POST['emb_logo'])) { //获取水印图片的尺寸并创建水印 list($wmk_width , $wmk_height) = getimagesize('images/logo.png'); //$x = ($width-$wmk_width) / 2; //$y = ($height-$wmk_height)/2; $x = $width-$wmk_width; $y = $height-$wmk_height; $wmk = imagecreatefrompng('images/logo.png'); //把水印图片和原图片合并在一起 /* 将 wmk 图像中坐标从 0,0 开始,宽度为 $wmk_width,高度为 $wmk_height 的一部分拷贝到 image 图像中坐标为 $x 和 $y 的位置上。 两图像将根据 pct=20 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。 */ imagecopymerge($image , $wmk , $x , $y , 0 , 0 , $wmk_width , $wmk_height , 20); //清除水印图片 imagedestroy($wmk); }
8、缩略图 128X96 大小
//缩略图大小 $thumb_width = $width * 0.10; $thumb_height = $height * 0.10; //创建一个缩略图 $thumb = imagecreatetruecolor($thumb_width, $thumb_height); imagecopyresampled($thumb, $image, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height);
http://www.bkjia.com/PHPjc/1059472.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1059472.htmlTechArticlephp随笔1-php图片处理, php图片处理的知识内容 upload_image.php : ! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm...