php处理图片

这段时间好浮躁,不知道该从哪下手了。想学这个又觉得现在最缺那个,学了这个现在要用到那个。不知道走左边还是右边了,虽然都能到目的地。

这是图片处理的笔记。只是个人笔记,没有细细研究,并且有个小错误。

  1 <?php
  2 header("content-type:text/html; charset=utf-8");
  3 error_reporting(E_ERROR | E_WARNING | E_PARSE);
  4 function echoHtml($title, $info = '', $content = array(), $tip = '')
  5 {
  6     $html    = '';
  7     $html    .= '<h3>'.$title.'</h3>';
  8     if($info)
  9     {
 10         $html    .= "<p>{$info}</p>";
 11     }
 12     if(is_array($content) && !empty($content))
 13     {
 14         foreach ($content as $key => $row)
 15         {
 16             $i    = $key+1;
 17             $html    .= "<p>\t{$i}:\t{$row}</p>";
 18         }
 19     }
 20     if($tip)
 21     {
 22         $html    .= "<p><b>\tTIP:{$tip}</b></p>";
 23     }
 24     $html    .= "<hr/><br/>";
 25     echo $html;
 26 }
 27 /**
 28  *    生成缩略图
 29  *    @param $src_img 操作图片文件名
 30  *    @param $new_img 新的图片文件名
 31  *    @param $n_w 宽度
 32  *    @param $n_h 高度
 33  *    @return resouce 
 34  *    @author cntnn11
 35  *    @date 2013-03-10
 36 */
 37 function thumb($src_img, $new_img, $n_w = 0, $n_h = 0)
 38 {
 39     if(is_file($src_img))
 40     {
 41         list($s_w, $w_h, $s_t)    = getimagesize($src_img);
 42 
 43         //对心图片的宽高进行等比缩放限制,使用固定的公式
 44         //缩放以原始图片最大的边做为新图片最大的尺寸,另一边则根据以下公式进行等比缩放
 45         //如果原图的宽度小于高度,那么重新计算新图的宽度,否则重新计算新图的高度
 46         if($n_w && ($s_w < $s_h))
 47         {
 48             $n_w    = ($n_h / $s_h) * $s_h;
 49         }
 50         else
 51         {
 52             $n_h    = ($n_w / $s_w) * $s_w;
 53         }
 54 
 55         //开始生成
 56         $res_img_new    = imagecreatetruecolor($n_w, $n_h);
 57         switch($s_t)
 58         {
 59             case 1:
 60                 $res_img    = imagecreatefromgif($src_img);
 61                 $ext        = 'gif';
 62                 break;
 63             case 2:
 64                 $res_img    = imagecreatefromjpeg($src_img);
 65                 $ext        = 'jpg';
 66                 break;
 67             case 3:
 68                 $res_img    = imagecreatefrompng($src_img);
 69                 $ext        = 'png';
 70                 break;
 71             default:
 72                 echo  '不支持的图片类型';
 73                 return false;
 74                 break;
 75         }
 76 
 77         imagecopyresampled($res_img_new, $res_img, 0, 0, 0, 0, $n_w, $n_h, $s_w, $s_h);
 78         //$res_img_new    = imagecreate($n_w, $n_h);
 79         //imagecopyresized($res_img_new, $res_img, 0, 0, 0, 0, $n_w, $n_h, $s_w, $s_h);
 80         global $img_new_dir;
 81         $new_img_file    = $img_new_dir.$new_img.'.'.$ext;
 82         imagejpeg($res_img_new, $new_img_file);
 83         //genImage($res_img_new, $new_img_file, $s_t);
 84         imagedestroy($res_img);
 85         imagedestroy($res_img_new);
 86         echo '缩放后的图片:';
 87         echo '<img src="'.$new_img_file.'" alt="生成的缩略图" ><hr/><br/>';
 88     }
 89 }
 90 /**
 91  *    接收传入参数生成一张图片
 92  *    @param $img_res 处理好的图片资源
 93  *    @param $img_file 新的图片地址
 94  *    @param $img_type 图片类型
 95  *    @return resouce 
 96  *    @author cntnn11
 97  *    @date 2013-03-10
 98 */
 99 function genImage($img_res, $img_file, $img_type = 2)
100 {
101     switch($img_type)
102     {
103         case 1:
104             return imagegif($img_res, $img_file);
105             break;
106         case 2:
107             return imagejpeg($img_res, $img_file);
108             break;
109         case 3:
110             return imagepng($img_res, $img_file);
111             break;
112         default:
113             return '不支持的图片类型';
114             break;
115     }
116 }
117 
118 /*==============================================================================================================================*/
119 global $img_name,$img_new_dir;
120 $img_name    = 'testimg.jpg';
121 $img_new_dir    = 'genimages/';
122 
123 echo "<p>原始测试图片:‘{$img_name}’</p>";
124 echo '<img src="'.$img_name.'" alt="测试图片" width="200px" >';
125 
126 
127 //获取图片资源,在此使用jpg格式做测试图片
128 $img_sour    = imagecreatefromjpeg('testimg.jpg');
129 
130 //图片宽高的获取
131 $title    = "图片宽高度获取";
132 $info    = "涉及使用函数imagesx(img source) imagesy(img source)";
133 $content= array(
134     'imagesx(image):传入一个通过imagecreate_()函数创建的图片资源类型做为参数,返回宽度',
135     'imagesy(image):同imagesx,返回高度!',
136     '测试图片的原始宽度:'.imagesx($img_sour).'px 原始高度:'.imagesy($img_sour).'px',
137 );
138 $tip    = "这两个函数的参数必须是图片资源类型!!";
139 echoHtml($title, $info, $content, $tip);
140 
141 //另一种获取图片属性的方法
142 $title    = "使用getimagesize(图片名);获取图片的属性";
143 $info    = "该函数返回一个数组,包含了宽度、高度、图片类型信息!只需接收一个文件名即可获取!";
144 $content= array(
145     '使用方式:getimagesize('.$img_name.')',
146     '返回一个数组:下标0表示宽度,下标1表示高度,下标2表示图片类型',
147     '&nbsp;&nbsp;&nbsp;&nbsp;图片类型说明:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM',
148     '下标从3开始的则为文本类型,可以说是对0、1、2三个下标值的说明',
149 );
150 echoHtml($title, $info, $content, $tip);
151 
152 //图片缩放函数
153 $title    = "图片缩放,使用效果更好的imagecopyresampled()函数";
154 $info    = "主要学习等比缩放,因为不对宽高进行约束,那么新生成的图片会变形";
155 $content= array(
156     'imagecopyresampled(dst_image, src_image, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h)',
157     '参数说明:',
158     '&nbsp;&nbsp; dst_image【新图片】 图片资源类型',
159     '&nbsp;&nbsp; src_image【要缩略的原始图片】 图片资源类型',
160     '&nbsp;&nbsp; dst_x,dst_y,dst_w,dst_h【缩略图片的X轴起点,y轴起点,宽度和高度】 数值类型',
161     '&nbsp;&nbsp; src_x,src_y,src_w,src_h【原始图片的X轴起点,y轴起点,宽度和高度】 数值类型',
162 );
163 $tip    = "还有一个imagecopyresized()的函数,参数同imagecopyresampled()函数一致,但效果没有他好,不知道为什么?";
164 echoHtml($title, $info, $content, $tip);
165 
166 //测试缩略方法
167 $title    = '写一个thumb()方法,用来等比缩略一张图片';
168 $info    = '使用imagecopyresampled()函数来使用';
169 $content= array(
170     '首先确定参数:原始图片,缩略图片目标位置,缩略图片的宽度和高度',
171     '获取图片的属性,宽高、类型,以创建相应的图片资源',
172     '使用固定公式算出新图片等比缩放的宽高',
173     '根据图片类型生成新的缩略图片',
174     '释放图片资源',
175 );
176 $tip    = "生成了黑色的图片,需要解决!!!!!!!!!!!";
177 echoHtml($titl, $info, $content, $tip);
178 thumb($img_name, 'suolve1', 500, 500);
179 
180 //图片透明
181 /*imagecolortransparent()
182 imagecolorstotal()
183 imagecolorsforindex()
184 imagecolorallocate()
185 imagefill()*/
186 
187 imagedestroy($img_sour);

 

posted @ 2013-03-17 11:47  cntnn11  阅读(233)  评论(0编辑  收藏  举报