zoukankan      html  css  js  c++  java
  • PHP从零单排(十八)图像处理

    1.打开现有的图像

    <?php
    header("Content-type:image/jpeg"); 
    $img=imagecreatefromjpeg("cc.jpg");
    imagejpeg($img);
    imagedestroy($img);
    ?

    >

    函数imagecreatefromjpeg()的參数即文件所在路径。返回值是參数所指图片的资源标识符。

    该函数时通过已有图像新建一个图像,并非单纯打开原图像本身。假设将图片的后缀名.jpg强制改为.png,即便是使用函数imagecreatefrompng()。也无法打开文件。由于图片本质还是jpg格式的图片。

    2.获取图片的相关属性

    <?php
    $img=imagecreatefromjpeg("cc.jpg");
    $x=imagesx($img);
    $y=imagesy($img);
    echo "图片cc.jpg的宽为:<b>$x</b> pixels";
    echo "<br/>";
    echo "<br/>";
    echo "图片cc.jpg的高为:<b>$y</b> pixels";
    ?

    >


    另外,通过一个不属于GD库的函数getimagesize(),能够取得图片的大小等相关属性,该函数的语法例如以下:

    array getimagesize(string $filename [, array &imageinfo])

    <?php
    $img_info=getimagesize("cc.jpg");
    for($i=0;$i<4;++$i)
    {
    	echo $img_info[$i];
    	echo "<br/>";	
    	}
    ?>
    第三个元素是图片的格式,它的取值含义例如以下所看到的:

    1:表示该图片是GIF格式

    2:表示该图片是JPG格式

    3:表示该图片是PNG格式

    4:表示该图片是SWF格式

    5:表示该图片是PSD格式

    6:表示该图片是BMP格式

    <?php
    $pic_name="ee.png";
    $pic_size=getimagesize($pic_name);
    ?

    > <img src="<?php echo $pic_name; ?

    >"<?

    php echo $pic_size[3]; ?>>


    3.对图片加水印效果

    ·获取要加入水印的图片的宽、高值

    ·确定图片大小是否满足水印文字大小

    ·确定水印效果在图片中的位置

    ·设定图像的混色模式

    ·生成水印效果

    ·释放资源

    <?

    php function makeimagewatermark($image,$pos,$water_text,$font_size,$color) { $font_type="c://WINDOWS//Fonts//SIMYOU.TTF"; if(!empty($image)&& file_exists($image)) { $img_info=getimagesize($image); $g_w=$img_info[0]; $g_h=$img_info[1]; switch($img_info[2]) { case 1: $img=imagecreatefromgif($image); break; case 2: $img=imagecreatefromjpeg($image); break; case 3: $img=imagecreatefrompng($image); break; default: die("Format Wrong"); } } else { die("Not exists!"); } $temp=imagettfbbox(ceil($font_size*2.5),0,$font_type,$water_text); $w=$temp[2]-$temp[6]; $h=$temp[3]-$temp[7]; if(($g_w<$w) || ($g_h<$h)) { echo "Too small!"; return; } switch($pos) { case 0: $pos_x=rand(0,($g_w-$w)); $pos_y=rand(0,($g_h-$h)); break; case 1: $pos_x=0; $pos_y=0; break; case 2: $pos_x=($g_w-$w)/2; $pos_y=($g_h-$h)/2; break; case 3: $pos_x=$g_w-$w; $pos_y=$g_h-$h; break; default: $pos_x=rand(0,($g_w-$w)); $pos_y=rand(0,($g_h-$h)); break; } imagealphablending($img,true);//设置图像混色模式 if(!empty($color) && (strlen($color)==7)) { $R=hexdec(substr($color,1,2)); $G=hexdec(substr($color,3,2)); $B=hexdec(substr($color,5)); } else { die("Format wrong!"); } $text_color=imagecolorallocate($img,$R,$G,$B); imagettftext($img,$font_size,0,$pos_x,$pos_y,$text_color,$font_type,$water_text); switch($img_info[2]) { case 1 : imagegif($img,$image); break; case 2 : imagejpeg($img,$image); break; case 3: imagepng($img,$image); break; default: die("Formate unSupport!"); } imagedestroy($img); } if(isset($_FILES) && !empty($_FILES['userfile'])&& $_FILES['userfile']['size']>0) {$uploadfile="./".time()."_".$_FILES['userfile']['name']; if(copy($_FILES['userfile']['tmp_name'],$uploadfile)) { makeimagewatermark($uploadfile,2,"Photo by Mac",16,"#43042A"); echo "<img src="".$uploadfile."" border="0">"; } else { echo "uploadWrong!<br/>"; } } ?> <html> <head> <title> 19.9.php </title> </head> <body> <form enctype="multipart/form-data" method="POST"> 选择上传图片:<input name="userfile" type="file"> <input type="submit" value="上传"> </form> </body> </html>


    4.生成已有图片的缩略图

    <?

    php header("Content-type:image/jpeg"); $img_name="cc.jpg"; $src_img=imagecreatefromjpeg($img_name); $ow=imagesx($src_img); $oh=imagesy($src_img); $nw=round($ow*200.0/$ow); $nh=round($oh*200.0/$oh); $desc_img=imagecreate($nw,$nh); imagecopyresized($desc_img,$src_img,0,0,0,0,$nw,$nh,$ow,$oh); imagejpeg($desc_img); imagedestroy($desc_img); imagedestroy($src_img); ?>

    第一个和第二个參数各自是目标图像、原图像的标识符,接下来4个參数是目的图像和原图像的复制位置的坐标,最后4个參数是目的图像和原图像的复制区域的宽高。

    !使用函数imagecopyresampled()函数

    <?php 
    header("Content-type:image/jpeg");
    $img_name="cc.jpg";
    $percent=0.2;
    $src_img=imagecreatefromjpeg($img_name);
    $ow=imagesx($src_img);
    $oh=imagesy($src_img);
    $nw=$ow*$percent;
    $nh=$oh*$percent;
    $desc_img=imagecreatetruecolor($nw,$nh);
    imagecopyresampled($desc_img,$src_img,0,0,0,0,$nw,$nh,$ow,$oh);
    imagejpeg($desc_img);
    imagedestroy($desc_img);
    imagedestroy($src_img);
    ?>




    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    打造基于CentOS7的xfce最简工作环境
    Linux下C程序的编辑,编译和运行以及调试
    修正 XE6 TListView 上方 SearchBok 右边的清除钮显示
    TabControl 显示彩色的图示 (XE6 Firemonkey)
    TSwitch 中文简繁显示支持(XE6 Android)
    改变 TMemo 的背景颜色 (Firemonkey)
    修正 XE5 Android 键盘三个问题
    Delphi 收藏
    展示 Popup 的使用方法
    ListView 下拉更新 (支持 Android)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4612950.html
Copyright © 2011-2022 走看看