php图片处理的知识内容
upload_image.php:
<span><!</span><span>DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span>></span>
<span><</span><span>html </span><span>xmlns</span><span>="http://www.w3.org/1999/xhtml"</span><span>></span>
<span><</span><span>head</span><span>></span>
<span><</span><span>meta </span><span>http-equiv</span><span>="Content-Type"</span><span> content</span><span>="text/html; charset=gb2312"</span> <span>/></span>
<span><</span><span>title</span><span>></span>图片上传页<span></</span><span>title</span><span>></span>
<span><</span><span>style </span><span>type</span><span>="text/css"</span><span>></span><span>
.file-box</span><span>{</span><span> position</span><span>:</span><span>relative</span><span>;</span><span>width</span><span>:</span><span>340px</span><span>}</span><span>
.txt</span><span>{</span><span> height</span><span>:</span><span>22px</span><span>;</span><span> border</span><span>:</span><span>1px solid #cdcdcd</span><span>;</span><span> width</span><span>:</span><span>200px</span><span>;</span><span>border-right</span><span>:</span><span>none</span><span>;</span><span>}</span><span>
.btn</span><span>{</span><span> background-color</span><span>:</span><span>#FFF</span><span>;</span><span> border</span><span>:</span><span>1px solid #CDCDCD</span><span>;</span><span>height</span><span>:</span><span>26px</span><span>;</span><span> width</span><span>:</span><span>70px</span><span>;</span><span>}</span><span>
.file</span><span>{</span><span> position</span><span>:</span><span>absolute</span><span>;</span><span> top</span><span>:</span><span>0</span><span>;</span><span> right</span><span>:</span><span>80px</span><span>;</span><span> height</span><span>:</span><span>24px</span><span>;</span><span> filter</span><span>:</span><span>alpha(opacity:0)</span><span>;</span><span>opacity</span><span>:</span><span> 0</span><span>;</span><span>width</span><span>:</span><span>260px </span><span>}</span>
<span></</span><span>style</span><span>></span>
<span><</span><span>script </span><span>type</span><span>="text/javascript"</span> <span>></span>
<span>//</span><span>JS获取路径 ---成功</span>
<span>function</span><span> change()<br /> {
</span><span>var</span><span> pic</span><span>=</span><span>document.getElementById(</span><span>'</span><span>pic</span><span>'</span><span>);
</span><span>var</span><span> file</span><span>=</span><span>document.getElementById(</span><span>'</span><span>fileField</span><span>'</span><span>);
pic.src</span><span>=</span><span>file.value;
</span><span>if</span><span>(file.files){
</span><span>if</span><span>(file.files.item(</span><span>0</span><span>)){
</span><span>//</span><span>src = window.URL.createObjectURL(fileObj.files[0]);</span>
<span> url</span><span>=</span><span>window.URL.createObjectURL(file.files.item(</span><span>0</span><span>));
document.getElementById(</span><span>'</span><span>textfield</span><span>'</span><span>).value </span><span>=</span><span> pic.src ;
pic.src</span><span>=</span><span>url;
}
}
}
</span><span></</span><span>script</span><span>></span>
<span></</span><span>head</span><span>></span>
<span><</span><span>body</span><span>></span>
<span><</span><span>form </span><span>action</span><span>="check_image.php"</span><span> method</span><span>="post"</span><span> enctype</span><span>="multipart/form-data"</span><span>></span>
<span><</span><span>table </span><span>border</span><span>="1"</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>></span>上传人名称:<span></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>><</span><span>input </span><span>type</span><span>="text"</span><span> class</span><span>='txt' </span><span>name</span><span>="username"</span> <span>/></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>></span>*上传图片:<span></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>><</span><span>div </span><span>class</span><span>="file-box"</span><span>><</span><span>input </span><span>type</span><span>='text' </span><span>name</span><span>='textfield' </span><span>id</span><span>='textfield' </span><span>class</span><span>='txt' </span><span>/><</span><span>input </span><span>type</span><span>='button' </span><span>class</span><span>='btn' </span><span>value</span><span>='浏览...' </span><span>/><</span><span>br </span><span>/></span>
<span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="uploadfile"</span><span> class</span><span>="file"</span><span> id</span><span>="fileField"</span><span> size</span><span>="28"</span><span> onchange</span><span>="change();"</span> <span>/></span>
<span><</span><span>input </span><span>type</span><span>="hidden"</span><span> id</span><span>="theFilePath"</span><span> name</span><span>="theFilePath"</span><span> value</span><span>=""</span><span>></span>
<span></</span><span>div</span><span>></span>
<span></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td </span><span>colspan</span><span>="2"</span><span>></span>
<span><</span><span>small</span><span>><</span><span>em</span><span>></span> * 可接受的图像格式:GIF,JPG、JPEG和PNG。上传后图片会变为1280X960大小。<span></</span><span>em</span><span>></</span><span>small</span><span>></span>
<span></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>></span>图片标题:<span></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>><</span><span>input </span><span>type</span><span>="text"</span><span> class</span><span>='txt' </span><span>name</span><span>="caption"</span><span>/></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td </span><span>colspan</span><span>="2"</span><span> style</span><span>="text-align:center;"</span><span>></span>
<span><</span><span>input </span><span>type</span><span>="submit"</span><span> name</span><span>="submit"</span><span> value</span><span>="Upload"</span><span> class</span><span>='btn' </span><span>/></span>
<span></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span></</span><span>table</span><span>></span>
<span><</span><span>img </span><span>src</span><span>=""</span><span> name</span><span>="pic"</span><span> id</span><span>="pic"</span> <span>/></span> <span><</span><span>br </span><span>/></span>
<span></</span><span>form</span><span>></span>
<span></</span><span>body</span><span>></span>
<span></</span><span>html</span><span>></span>
check_image.php 集合图片上传,MySQL数据库保存,图片放大至1280X960,图片加文字,图片PS处理,图片缩略图,图片打LOGO水印。功能集合强大。
<?<span>php
</span><span>//</span><span>session</span>
<span>session_start</span><span>();
</span><span>if</span>(<span>$_POST</span>['submit'] == 'Upload'<span>)
{
</span><span>if</span>(<span>$_FILES</span>['uploadfile']['error'] !=<span> UPLOAD_ERR_OK)
{
</span><span>switch</span>(<span>$_FILES</span>['uploadfile']['error'<span>])
{
</span><span>case</span> UPLOAD_ERR_INI_SIZE: <span>//</span><span>其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值</span>
<span>die</span>('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值'<span>);
</span><span>break</span><span>;
</span><span>case</span> UPLOAD_ERR_FORM_SIZE: <span>//</span><span>其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值</span>
<span>die</span>('上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值'<span>);
</span><span>break</span><span>;
</span><span>case</span> UPLOAD_ERR_PARTIAL: <span>//</span><span>其值为 3,文件只有部分被上传</span>
<span>die</span>('文件只有部分被上传'<span>);
</span><span>break</span><span>;
</span><span>case</span> UPLOAD_ERR_NO_FILE: <span>//</span><span>其值为 4,没有文件被上传</span>
<span>die</span>('没有文件被上传'<span>);
</span><span>break</span><span>;
</span><span>case</span> UPLOAD_ERR_NO_TMP_DIR: <span>//</span><span>其值为 6,找不到临时文件夹</span>
<span>die</span>('找不到临时文件夹'<span>);
</span><span>break</span><span>;
</span><span>case</span> UPLOAD_ERR_CANT_WRITE: <span>//</span><span>其值为 7,文件写入失败</span>
<span>die</span>('文件写入失败'<span>);
</span><span>break</span><span>;
</span><span>case</span> UPLOAD_ERR_EXTENSION: <span>//</span><span>其他异常</span>
<span>die</span>('其他异常'<span>);
</span><span>break</span><span>;
}
}
</span><span>//</span><span>判断图片的后缀</span>
<span>switch</span>(<span>$type</span><span>)
{
</span><span>case</span> IMAGETYPE_GIF:
<span>$ext</span> = '.gif'<span>;
</span><span>break</span><span>;
</span><span>case</span> IMAGETYPE_JPEG:
<span>$ext</span> = '.jpg'<span>;
</span><span>break</span><span>;
</span><span>case</span> IMAGETYPE_PNG:
<span>$ext</span> = '.png'<span>;
</span><span>break</span><span>;
</span><span>default</span> :
<span>die</span>('您上传的文件不支持的文件类型。'<span>);
}
</span><span>//</span><span>关键位置-取出文件后缀</span>
<span>$_SESSION</span>['ext'] = <span>$ext</span><span>;
}
</span><span>/*</span><span>
//改变图像的大小为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);
}
</span><span>*/</span>
<span>//</span><span>创建moviesite数据库--MySQL</span>
<span>$coon</span> = <span>mysql_connect</span>("localhost","root","lifu") or <span>die</span>('不能连接到数据库'<span>);
</span><span>if</span> (!<span>$coon</span><span>)
{
</span><span>die</span>('无法连接: ' . <span>mysql_error</span><span>());
}
</span><span>if</span> (<span>mysql_query</span>("CREATE DATABASE if not exists moviesite",<span>$coon</span>)) <span>//</span><span>如果没有就创建数据库</span>
<span> {
</span><span>echo</span> "数据库创建成功<br>"<span>;
}
</span><span>else</span><span>
{
</span><span>echo</span> "数据库创建错误: " . <span>mysql_error</span><span>();
}
</span><span>//</span><span> 创建images表</span>
<span>mysql_select_db</span>("moviesite", <span>$coon</span><span>);
</span><span>//</span><span>如果没有就创建表</span>
<span>$sql</span> = "<span>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
)</span>"<span>;
</span><span>mysql_query</span>(<span>$sql</span>,<span>$coon</span><span>);
</span><span>mysql_close</span>(<span>$coon</span><span>);
</span><span>//</span><span>修改图片效果</span>
<span>$db</span> = <span>mysql_connect</span>('localhost','root','lifu') or <span>die</span>('不能连接到数据库'<span>);
</span><span>mysql_select_db</span>('moviesite',<span>$db</span>) or <span>die</span>(<span>mysql_error</span>(<span>$db</span><span>));
</span><span>//</span><span>上传文件的路径</span>
<span>$dir</span> = 'D:\phpStudy\WWW\loadimages\images'<span>;
</span><span>//</span><span>缩略图的路径</span>
<span>$thumbdir</span> = 'D:\phpStudy\WWW\loadimages\images\thumbs'<span>;
</span><span>//</span><span>设置环境变量</span>
<span>putenv</span>('GDFONTPATH='.'C:\Windows\Fonts'<span>);
</span><span>$font</span> = "C:\Windows\Fonts\arial.ttf"<span>;
</span><span>//</span><span>upload_image.php页面传递过来的参数,如果是上传图片</span>
<span>if</span>(<span>$_POST</span>['submit'] == 'Upload'<span>)
{ </span><span>/*</span><span>代码重复
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;
}
}
</span><span>*/</span>
<span>$image_caption</span> = <span>$_POST</span>['caption'<span>];
</span><span>$image_username</span> = <span>$_POST</span>['username'<span>];
</span><span>$image_date</span> = <span>date</span>('Y-m-D'<span>);
</span><span>/*</span><span>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 标记
</span><span>*/</span>
<span>list</span>(<span>$width</span>,<span>$height</span>,<span>$type</span>,<span>$attr</span>) = <span>getimagesize</span>(<span>$_FILES</span>['uploadfile']['tmp_name'<span>]);
</span><span>//</span><span>imagecreatefromgXXX方法从一个url路径中创建一个新的图片</span>
<span>switch</span>(<span>$type</span><span>)
{
</span><span>case</span> IMAGETYPE_GIF:
<span>$image</span> = imagecreatefromgif(<span>$_FILES</span>['uploadfile']['tmp_name']) or <span>die</span>('你上传的文件是不支持的文件类型'<span>);
</span><span>$ext</span> = '.gif'<span>;
</span><span>$array</span> = <span>getimagesize</span>(<span>$_FILES</span>['uploadfile']['tmp_name'<span>]);
</span><span>break</span><span>;
</span><span>case</span> IMAGETYPE_JPEG:
<span>$image</span> = imagecreatefromjpeg(<span>$_FILES</span>['uploadfile']['tmp_name']) or <span>die</span>('你上传的文件是不支持的文件类型'<span>);
</span><span>$ext</span> = '.jpg'<span>;
</span><span>$array</span> = <span>getimagesize</span>(<span>$_FILES</span>['uploadfile']['tmp_name'<span>]);
</span><span>break</span><span>;
</span><span>case</span> IMAGETYPE_PNG:
<span>$image</span> = imagecreatefrompng(<span>$_FILES</span>['uploadfile']['tmp_name']) or <span>die</span>('你上传的文件是不支持的文件类型'<span>);
</span><span>$ext</span> = '.png'<span>;
</span><span>$array</span> = <span>getimagesize</span>(<span>$_FILES</span>['uploadfile']['tmp_name'<span>]);
</span><span>break</span><span>;
</span><span>default</span> :
<span>die</span>('您上传的文件不支持的文件类型。'<span>);
}
</span><span>//</span><span>将图片改为1280X960
//新建一个指定大小的真彩色图像big</span>
<span>$big</span> = imagecreatetruecolor(1280, 960<span>);
</span><span>//</span><span>重采样拷贝部分图像并调整大小为1280X960</span>
imagecopyresampled(<span>$big</span>, <span>$image</span>, 0, 0, 0, 0, 1280, 960, <span>$array</span>[0], <span>$array</span>[1<span>]);
</span><span>$query</span> = 'insert into images(image_caption,image_username,image_date) values ("'.<span>$image_caption</span>.'","'.<span>$image_username</span>.'",now())'<span>;
</span><span>mysql_query</span>(<span>$query</span> , <span>$db</span>) or <span>die</span>(<span>mysql_error</span>(<span>$db</span><span>));
</span><span>$last_id</span> = <span>mysql_insert_id</span><span>();
</span><span>//</span><span>用写入的id作为图片的名字,避免同名的文件存放在同一目录中</span>
<span>$imagename</span> = <span>$last_id</span>.<span>$ext</span><span>;
</span><span>$image_id</span> = <span>$last_id</span><span>;
</span><span>$query</span> = 'update images set image_filename="'.<span>$imagename</span>.'" where image_id='.<span>$last_id</span><span>;
</span><span>mysql_query</span>(<span>$query</span> , <span>$db</span>) or <span>die</span>(<span>mysql_error</span>(<span>$db</span><span>));
</span><span>//</span><span>有url指定的图片创建图片并保存到指定目录</span>
<span>switch</span>(<span>$type</span><span>)
{
</span><span>case</span> IMAGETYPE_GIF:<span>
imagegif(</span><span>$big</span>,<span>$dir</span>.'/'.<span>$imagename</span><span>);
</span><span>break</span><span>;
</span><span>case</span> IMAGETYPE_JPEG:<span>
imagejpeg(</span><span>$big</span>,<span>$dir</span>.'/'.<span>$imagename</span><span>);
</span><span>break</span><span>;
</span><span>case</span> IMAGETYPE_PNG:<span>
imagepng(</span><span>$big</span>,<span>$dir</span>.'/'.<span>$imagename</span><span>);
</span><span>break</span><span>;
}
</span><span>//</span><span>销毁由url生成的图片</span>
imagedestroy(<span>$big</span><span>);
imagedestroy(</span><span>$image</span><span>);
}
</span><span>else</span> <span>//</span><span>如果图片已经上传,则从数据库中取图片名字</span>
<span> {
</span><span>$query</span> = 'select image_id,image_caption,image_username,image_date from images where image_id='.<span>$_POST</span>['id'<span>];
</span><span>$result</span> = <span>mysql_query</span>(<span>$query</span>,<span>$db</span>) or <span>die</span>(<span>mysql_error</span>(<span>$db</span><span>));
</span><span>//</span><span>将结果集转换成关联数据,再将关联数组的键名当作变量名,值作为变量的值。</span>
<span>extract</span>(<span>mysql_fetch_assoc</span>(<span>$result</span><span>));
</span><span>list</span>(<span>$width</span>,<span>$height</span>,<span>$type</span>,<span>$attr</span>) = <span>getimagesize</span>(<span>$dir</span>.'/'.<span>$image_id</span>.<span>$_SESSION</span>['ext'<span>]);
}
</span><span>//</span><span>如果是保存图片</span>
<span>if</span>(<span>$_POST</span>['submit'] == 'Save'<span>)
{
</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['id']) && <span>ctype_digit</span>(<span>$_POST</span>['id']) && <span>file_exists</span>(<span>$dir</span>.'/'.<span>$_POST</span>['id'].<span>$_SESSION</span>['ext'<span>]))
{
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.jpg'<span>)
{
</span><span>$image</span> = imagecreatefromjpeg(<span>$dir</span>.'/'.<span>$_POST</span>['id'].<span>$_SESSION</span>['ext'<span>]);
}
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.png'<span>)
{
</span><span>$image</span> = imagecreatefrompng(<span>$dir</span>.'/'.<span>$_POST</span>['id'].<span>$_SESSION</span>['ext'<span>]);
}
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.gif'<span>)
{
</span><span>$image</span> = imagecreatefromgif(<span>$dir</span>.'/'.<span>$_POST</span>['id'].<span>$_SESSION</span>['ext'<span>]);
}
}
</span><span>else</span><span>
{
</span><span>die</span>('指定的无效图像'<span>);
}
</span><span>$effect</span> = (<span>isset</span>(<span>$_POST</span>['effect'])) ? <span>$_POST</span>['effect'] : -1<span>;
</span><span>switch</span>(<span>$effect</span><span>)
{
</span><span>case</span> IMG_FILTER_NEGATE:<span>
imagefilter(</span><span>$image</span> , IMG_FILTER_NEGATE); <span>//</span><span>将图像中所有颜色反转</span>
<span>break</span><span>;
</span><span>case</span> IMG_FILTER_GRAYSCALE:<span>
imagefilter(</span><span>$image</span> , IMG_FILTER_GRAYSCALE); <span>//</span><span>将图像转换为灰度的</span>
<span>break</span><span>;
</span><span>case</span> IMG_FILTER_EMBOSS:<span>
imagefilter(</span><span>$image</span> , IMG_FILTER_EMBOSS); <span>//</span><span>使图像浮雕化</span>
<span>break</span><span>;
</span><span>case</span> IMG_FILTER_GAUSSIAN_BLUR:<span>
imagefilter(</span><span>$image</span> , IMG_FILTER_GAUSSIAN_BLUR); <span>//</span><span>用高斯算法模糊图像</span>
<span>break</span><span>;
}
</span><span>//</span><span>图片指定位置打印文字</span>
<span>if</span>(<span>isset</span>(<span>$_POST</span>['emb_caption'<span>]))
{ </span><span>/*</span><span>
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
$image 图像源 $size 字体大小 $angle 逆时针旋转角度 $fontfile 字体类型 $text 文本内容
</span><span>*/</span><span>
imagettftext(</span><span>$image</span> , 12 , 0 , 20 , 20 , 0 , <span>$font</span> , <span>$image_caption</span><span>);
}
</span><span>//</span><span>图片指定位置打LOGO</span>
<span>if</span>(<span>isset</span>(<span>$_POST</span>['emb_logo'<span>]))
{
</span><span>//</span><span>获取水印图片的尺寸并创建水印</span>
<span>list</span>(<span>$wmk_width</span> , <span>$wmk_height</span>) = <span>getimagesize</span>('images/logo.png'<span>);
</span><span>//</span><span>$x = ($width-$wmk_width) / 2;
//$y = ($height-$wmk_height)/2;</span>
<span>$x</span> = <span>$width</span>-<span>$wmk_width</span><span>;
</span><span>$y</span> = <span>$height</span>-<span>$wmk_height</span><span>;
</span><span>$wmk</span> = imagecreatefrompng('images/logo.png'<span>);
</span><span>//</span><span>把水印图片和原图片合并在一起</span>
<span>/*</span><span>
将 wmk 图像中坐标从 0,0 开始,宽度为 $wmk_width,高度为 $wmk_height 的一部分拷贝到 image 图像中坐标为 $x 和 $y 的位置上。
两图像将根据 pct=20 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为
100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
</span><span>*/</span><span>
imagecopymerge(</span><span>$image</span> , <span>$wmk</span> , <span>$x</span> , <span>$y</span> , 0 , 0 , <span>$wmk_width</span> , <span>$wmk_height</span> , 20<span>);
</span><span>//</span><span>清除水印图片</span>
imagedestroy(<span>$wmk</span><span>);
}
</span><span>//</span><span>缩略图大小</span>
<span>$thumb_width</span> = <span>$width</span> * 0.10<span>;
</span><span>$thumb_height</span> = <span>$height</span> * 0.10<span>;
</span><span>//</span><span>创建一个缩略图</span>
<span>$thumb</span> = imagecreatetruecolor(<span>$thumb_width</span>, <span>$thumb_height</span><span>);
imagecopyresampled(</span><span>$thumb</span>, <span>$image</span>, 0, 0, 0, 0, <span>$thumb_width</span>, <span>$thumb_height</span>, <span>$width</span>, <span>$height</span><span>);
</span><span>//</span><span>保存缩略图</span>
<span>if</span>(<span>$_SESSION</span>['ext'] == '.jpg'<span>)
{
imagejpeg(</span><span>$thumb</span>, <span>$thumbdir</span> . '/' . <span>$_POST</span>['id'] . <span>$_SESSION</span>['ext'], 100<span>);
}
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.png'<span>)
{</span>
imagepng(<span>$thumb</span>, <span>$thumbdir</span> . '/' . <span>$_POST</span>['id'] . <span>$_SESSION</span>['ext'<span>]);
}
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.gif'<span>)
{
imagegif(</span><span>$thumb</span>, <span>$thumbdir</span> . '/' . <span>$_POST</span>['id'] . <span>$_SESSION</span>['ext'<span>]);
}
</span><span>echo</span> "修改好的缩略图:@@##@@$_POST</span>['id'] . <span>$_SESSION</span>['ext']."' alt='' /> <br />"<span>;
</span><span>//</span><span>清除缩略图</span>
imagedestroy(<span>$thumb</span><span>);
</span><span>//</span><span>保存原图</span>
<span>if</span>(<span>$_SESSION</span>['ext'] == '.jpg'<span>)
{
imagejpeg(</span><span>$image</span> , <span>$dir</span>.'/'.<span>$_POST</span>['id'].<span>$_SESSION</span>['ext'] , 100<span>);
}
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.png'<span>)
{
</span><span>//</span><span>压缩等级必须是0-9的png文件</span>
imagepng(<span>$image</span> , <span>$dir</span>.'/'.<span>$_POST</span>['id'].<span>$_SESSION</span>['ext'<span>]);
}
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.gif'<span>)
{
imagegif(</span><span>$image</span> , <span>$dir</span>.'/'.<span>$_POST</span>['id'].<span>$_SESSION</span>['ext'<span>]);
}
</span><span>echo</span> "修改好的大图:@@##@@$_POST</span>['id'] . <span>$_SESSION</span>['ext']."' alt='' /> <br />"<span>;
</span>?>
<html>
<head>
<title>你的图片在这!</title>
</head>
<body>
<h1>你的图片被保存!</h1>
@@##@@$_POST</span>['id'];?>.jpg" alt="" />
</body>
</html>
<?<span>php
}
</span><span>else</span><span>
{
</span>?>
<html>
<head>
<title>你的图片在这!</title>
</head>
<body>
<p>这里是你上传到服务器上的图片:</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p>
</body>
</html>
<?<span>php
</span><span>if</span>(<span>$_POST</span>['submit'] == 'Upload'<span>)
{
</span><span>$imagename</span> = 'images/'.<span>$image_id</span>.<span>$_SESSION</span>['ext'<span>];
}
</span><span>else</span><span>
{
</span><span>$imagename</span> = 'image_effect.php?id='.<span>$image_id</span>.'&e='.<span>$_POST</span>['effect'<span>];
</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['emb_caption'<span>]))
{
</span><span>$imagename</span> .= '&capt='.<span>urlencode</span>(<span>$image_caption</span><span>);
}
</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['emb_logo'<span>]))
{
</span><span>$imagename</span> .= '&logo=1'<span>;
}
}
</span>?>
<div>
<?php <span>echo</span> "src:".<span>$imagename</span> ; ?>
@@##@@$imagename</span>;?>">as</span>:</td>
<td><?php <span>echo</span> "moviesite数据库images表第".<span>$image_id</span> ."行!" ;?></td>
</tr>
<tr>
<td>Height:</td>
<td><?php <span>echo</span> <span>$height</span>;?></td>
</tr>
<tr>
<td>Widht:</td>
<td><?php <span>echo</span> <span>$width</span>;?></td>
</tr>
<tr>
<td>Upload <span>date</span>:</td>
<td><?php <span>echo</span> <span>$image_date</span>;?></td>
</tr>
</table>
<p>你可以从下面的选项列表中对你的图像应用一个特殊的效果。注:使用任何一个过滤器,保存一个图像 <em>可以撤消</em></p>
<form action="<?php echo <span>$_SERVER</span>['PHP_SELF'];?>" method="post">
<input type="hidden" name="id" value="<?php echo <span>$image_id</span>;?>"/>
<select name="effect" id="">
<option value="-1">保持原状</option>
<?<span>php
</span><span>echo</span> '<option value="'.IMG_FILTER_GRAYSCALE.'" '<span>;
</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['effect']) && <span>$_POST</span>['effect'] ==<span> IMG_FILTER_GRAYSCALE)
{
</span><span>echo</span> 'selected="selected"'<span>;
}
</span><span>echo</span> ' >灰度图像</option>'<span>;
</span><span>echo</span> '<option value="'.IMG_FILTER_GAUSSIAN_BLUR.'"'<span>;
</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['effect']) && <span>$_POST</span>['effect'] ==<span> IMG_FILTER_GAUSSIAN_BLUR)
{
</span><span>echo</span> ' selected="selected"'<span>;
}
</span><span>echo</span> '>高斯算法模糊图像</option>'<span>;
</span><span>echo</span> '<option value="'.IMG_FILTER_EMBOSS.'"'<span>;
</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['effect']) && <span>$_POST</span>['effect'] ==<span> IMG_FILTER_EMBOSS)
{
</span><span>echo</span> 'selected="selected"'<span>;
}
</span><span>echo</span> '>图像浮雕化</option>'<span>;
</span><span>echo</span> '<option value="'.IMG_FILTER_NEGATE.'"'<span>;
</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['effect']) && <span>$_POST</span>['effect'] ==<span> IMG_FILTER_NEGATE)
{
</span><span>echo</span> 'selected="selected"'<span>;
}
</span><span>echo</span> '>图像中所有颜色反转</option>'<span>;
</span>?>
</select><br />
<?<span>php
</span><span>echo</span> '<input type="checkbox" name="emb_caption"'<span>;
</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['emb_caption'<span>]))
{
</span><span>echo</span> ' checked="checked"'<span>;
}
</span><span>echo</span> ' />是否嵌入在图像的标题?'<span>;
</span><span>echo</span> '<br />'<span>;
</span><span>//</span><span>添加水印选项</span>
<span>echo</span> '<input type="checkbox" name="emb_logo" '<span>;
</span><span>if</span>(<span>isset</span>(<span>$_POST</span>['emb_logo'<span>]))
{
</span><span>echo</span> 'checked="checked"'<span>;
}
</span><span>echo</span> ' />是否嵌入668LOGO?'. '<br />'<span>;
</span>?>
<input type="submit" value="Save" name="submit" />
<!--<input type="submit" value="Preview" name="submit" />-->
</form>
</div>
<?<span>php
}
</span><span>mysql_close</span>(<span>$db</span><span>);
</span>?>
本来有一个Preview的,后来没弄了,但是代码还是给上 image_effect.php ,已经把Preview注释掉了。
<?<span>php
</span><span>//</span><span>上传文件的路径</span>
<span>$dir</span> = 'D:\phpStudy\WWW\loadimages\images'<span>;
</span><span>//</span><span>设置环境变量
putenv('GDFONTPATH='.'C:\Windows\Fonts');</span>
<span>$font</span> = "C:\Windows\Fonts\arial.ttf"<span>;
</span><span>if</span>(<span>isset</span>(<span>$_GET</span>['id']) && <span>ctype_digit</span>(<span>$_GET</span>['id']) && <span>file_exists</span>(<span>$dir</span>.'/'.<span>$_GET</span>['id'].<span>$_SESSION</span>['ext'<span>]))
{
</span><span>$image</span> = imagecreatefromjpeg(<span>$dir</span>.'/'.<span>$_GET</span>['id'].<span>$_SESSION</span>['ext'<span>]);
}
</span><span>else</span><span>
{
</span><span>die</span>('invalid image specified'<span>);
}
</span><span>$effect</span> = (<span>isset</span>(<span>$_GET</span>['e'])) ? <span>$_GET</span>['e'] : -1<span>;
</span><span>switch</span>(<span>$effect</span><span>)
{
</span><span>case</span> IMG_FILTER_NEGATE:<span>
imagefilter(</span><span>$image</span> ,<span> IMG_FILTER_NEGATE);
</span><span>break</span><span>;
</span><span>case</span> IMG_FILTER_GRAYSCALE:<span>
imagefilter(</span><span>$image</span> ,<span> IMG_FILTER_GRAYSCALE);
</span><span>break</span><span>;
</span><span>case</span> IMG_FILTER_EMBOSS:<span>
imagefilter(</span><span>$image</span> ,<span> IMG_FILTER_EMBOSS);
</span><span>break</span><span>;
</span><span>case</span> IMG_FILTER_GAUSSIAN_BLUR:<span>
imagefilter(</span><span>$image</span> ,<span> IMG_FILTER_GAUSSIAN_BLUR);
</span><span>break</span><span>;
}
</span><span>if</span>(<span>isset</span>(<span>$_GET</span>['capt'<span>]))
{
</span><span>//</span><span>echo $_GET['capt'];</span>
imagettftext(<span>$image</span>, 12, 0, 20, 20, 0, <span>$font</span>, <span>$_GET</span>['capt'<span>]);
}
</span><span>if</span>(<span>isset</span>(<span>$_GET</span>['logo'<span>]))
{
</span><span>list</span>(<span>$widht</span> , <span>$height</span>) = <span>getimagesize</span>(<span>$dir</span>.'/'.<span>$_GET</span>['id'].<span>$_SESSION</span>['ext'<span>]);
</span><span>list</span>(<span>$wmk_width</span> , <span>$wmk_height</span>) = <span>getimagesize</span>('images/logo.png'<span>);
</span><span>$x</span> = <span>$width</span>-<span>$wmk_width</span><span>;
</span><span>$y</span> = <span>$height</span>-<span>$wmk_height</span><span>;
</span><span>$wmk</span> = imagecreatefrompng('images/logo.png'<span>);
imagecopymerge(</span><span>$image</span> , <span>$wmk</span> , <span>$x</span> , <span>$y</span> , 0 , 0 , <span>$wmk_width</span> , <span>$wmk_height</span> , 20<span>);
imagedestroy(</span><span>$wmk</span><span>);
}
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.jpg'<span>)
{
</span><span>header</span>('Content-Type:image/jpeg'<span>);
imagejpeg(</span><span>$image</span> , '' , 100<span>);
}
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.png'<span>)
{
</span><span>header</span>('Content-Type:image/png'<span>);
imagepng(</span><span>$image</span> , ''<span> );
}
</span><span>if</span>(<span>$_SESSION</span>['ext'] == '.gif'<span>)
{
</span><span>header</span>('Content-Type:image/gif'<span>);
imagegif(</span><span>$image</span> , ''<span> );
}
</span>?>内容总结:
本人是自学的php,代码书写多有不规范之处,并且有些位置的代码有重复累赘。以后需要加强。
upload_image.php: 主要是 HTML+Javascritp+Css 没什么可说的,主要就 javascript 调用 window.URL.createObjectURL(fileObj) 方法。获取图片的相对路径,并做图片的展示。
check_image.php: 1、session 用于保存从 upload_image.php 传递过来的图片的后缀名。
2、数据库moviesite创建,images表的创建
<span>$sql</span> = "<span>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
)</span>";3、使用 imagecreatetruecolor 和 imagecopyresampled 将图片大小调整为1280X960.然后将图片上传保存到指定位置。
<span> //</span><span>将图片改为1280X960
//新建一个指定大小的真彩色图像big</span>
<span>$big</span> = imagecreatetruecolor(1280, 960<span>);
</span><span>//</span><span>重采样拷贝部分图像并调整大小为1280X960</span>
imagecopyresampled(<span>$big</span>, <span>$image</span>, 0, 0, 0, 0, 1280, 960, <span>$array</span>[0], <span>$array</span>[1]);4、如果图片已经上传,则从数据库中取图片名字
<span>$query</span> = 'select image_id,image_caption,image_username,image_date from images where image_id='.<span>$_POST</span>['id'<span>];
</span><span>$result</span> = <span>mysql_query</span>(<span>$query</span>,<span>$db</span>) or <span>die</span>(<span>mysql_error</span>(<span>$db</span><span>));
</span><span>//</span><span>将结果集转换成关联数据,再将关联数组的键名当作变量名,值作为变量的值。</span>
<span>extract</span>(<span>mysql_fetch_assoc</span>(<span>$result</span><span>));
</span><span>list</span>(<span>$width</span>,<span>$height</span>,<span>$type</span>,<span>$attr</span>) = <span>getimagesize</span>(<span>$dir</span>.'/'.<span>$image_id</span>.<span>$_SESSION</span>['ext']); 5、bool imagefilter ( resource $src_im , int $filtertype [, int $arg1 [, int $arg2 [, int $arg3 ]]] ) 对图像使用过滤器 PS图片
<span> 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 设定柔滑级别。</span>6、图片加文字
<span>//</span><span>图片指定位置打印文字</span>
<span>if</span>(<span>isset</span>(<span>$_POST</span>['emb_caption'<span>]))
{ </span><span>/*</span><span>
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
$image 图像源 $size 字体大小 $angle 逆时针旋转角度 $fontfile 字体类型 $text 文本内容
</span><span>*/</span><span>
imagettftext(</span><span>$image</span> , 12 , 0 , 20 , 20 , 0 , <span>$font</span> , <span>$image_caption</span><span>);
}</span>7、图片打LOGO
<span>//</span><span>图片指定位置打LOGO</span>
<span>if</span>(<span>isset</span>(<span>$_POST</span>['emb_logo'<span>]))
{
</span><span>//</span><span>获取水印图片的尺寸并创建水印</span>
<span>list</span>(<span>$wmk_width</span> , <span>$wmk_height</span>) = <span>getimagesize</span>('images/logo.png'<span>);
</span><span>//</span><span>$x = ($width-$wmk_width) / 2;
//$y = ($height-$wmk_height)/2;</span>
<span>$x</span> = <span>$width</span>-<span>$wmk_width</span><span>;
</span><span>$y</span> = <span>$height</span>-<span>$wmk_height</span><span>;
</span><span>$wmk</span> = imagecreatefrompng('images/logo.png'<span>);
</span><span>//</span><span>把水印图片和原图片合并在一起</span>
<span>/*</span><span>
将 wmk 图像中坐标从 0,0 开始,宽度为 $wmk_width,高度为 $wmk_height 的一部分拷贝到 image 图像中坐标为 $x 和 $y 的位置上。
两图像将根据 pct=20 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为
100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
</span><span>*/</span><span>
imagecopymerge(</span><span>$image</span> , <span>$wmk</span> , <span>$x</span> , <span>$y</span> , 0 , 0 , <span>$wmk_width</span> , <span>$wmk_height</span> , 20<span>);
</span><span>//</span><span>清除水印图片</span>
imagedestroy(<span>$wmk</span><span>);
}</span>8、缩略图 128X96 大小
<span>//</span><span>缩略图大小</span>
<span>$thumb_width</span> = <span>$width</span> * 0.10<span>;
</span><span>$thumb_height</span> = <span>$height</span> * 0.10<span>;
</span><span>//</span><span>创建一个缩略图</span>
<span>$thumb</span> = imagecreatetruecolor(<span>$thumb_width</span>, <span>$thumb_height</span><span>);
imagecopyresampled(</span><span>$thumb</span>, <span>$image</span>, 0, 0, 0, 0, <span>$thumb_width</span>, <span>$thumb_height</span>, <span>$width</span>, <span>$height</span>);
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号