PHP中改变图片的尺寸大小的代码
2015-01-24信息快讯网
改变图片的尺寸是一个很常见的功能需求,下面开始研究下关于PHP改变图片尺寸的方法。
先介绍一个自己写的函数。<?php $imgsrc = "http://www.nowamagic.net/images/3.jpg"; $width = 780; $height = 420; resizejpg($imgsrc,$imgdst,$width,$height); function resizejpg($imgsrc,$imgdst,$imgwidth,$imgheight) { //$imgsrc jpg格式图像路径 $imgdst jpg格式图像保存文件名 $imgwidth要改变的宽度 $imgheight要改变的高度 //取得图片的宽度,高度值 $arr = getimagesize($imgsrc); header("Content-type: image/jpg"); $imgWidth = $imgwidth; $imgHeight = $imgheight; // Create image and define colors $imgsrc = imagecreatefromjpeg($imgsrc); $image = imagecreatetruecolor($imgWidth, $imgHeight); //创建一个彩色的底图 imagecopyresampled($image, $imgsrc, 0, 0, 0, 0,$imgWidth,$imgHeight,$arr[0], $arr[1]); imagepng($image); imagedestroy($image); } ?>
imagecopyresampled
imagecopyresampled -- 重采样拷贝部分图像并调整大小。
int imagecopyresampled ( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
imagecopyresampled() 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。dst_im 和 src_im 分别是目标图像和源图像的标识符。如果源和目标的宽度和高度不同,则会进行相应的图像收缩和拉伸。坐标指的是左上角。本函数可用来在同一幅图内部拷贝(如果 dst_im 和 src_im 相同的话)区域,但如果区域交迭的话则结果不可预知。
注: 因为调色板图像限制(255+1 种颜色)有个问题。重采样或过滤图像通常需要多于 255 种颜色,计算新的被重采样的像素及其颜色时采用了一种近似值。对调色板图像尝试分配一个新颜色时,如果失败我们选择了计算结果最接近(理论上)的颜色。这并不总是视觉上最接近的颜色。这可能会产生怪异的结果,例如空白(或者视觉上是空白)的图像。要跳过这个问题,请使用真彩色图像作为目标图像,例如用 imagecreatetruecolor() 创建的。
注: imagecopyresampled() 需要 GD 2.0.l 或更高版本。
一个简单的示例:
<?php // The file $filename = 'test.jpg'; $percent = 0.5; // Content type header('Content-Type: image/jpeg'); // Get new dimensions list($width, $height) = getimagesize($filename); $new_width = $width * $percent; $new_height = $height * $percent; // Resample $image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); // Output imagejpeg($image_p, null, 100); ?>
示例2:
<?php // The file $filename = 'test.jpg'; // Set a maximum height and width $width = 200; $height = 200; // Content type header('Content-Type: image/jpeg'); // Get new dimensions list($width_orig, $height_orig) = getimagesize($filename); $ratio_orig = $width_orig/$height_orig; if ($width/$height > $ratio_orig) { $width = $height*$ratio_orig; } else { $height = $width/$ratio_orig; } // Resample $image_p = imagecreatetruecolor($width, $height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); // Output imagejpeg($image_p, null, 100); ?>
有两种改变图像大小的方法:
ImageCopyResized() 函数在所有GD版本中有效,但其缩放图像的算法比较粗糙。
ImageCopyResamples(),其像素插值算法得到的图像边缘比较平滑。(但该函数的速度比 ImageCopyResized() 慢)。
两个函数的参数是一样的,如下:
imageCopyResampled(dest,src,dy,dx,sx,sy,dw,dh,sw,sh); imageCopyResized(dest,src,dy,dx,sx,sy,dw,dh,sw,sh);
例子:
<?PHP $src = ImageCreateFromJPEG('php.jpg'); $width = ImageSx($src); $height = ImageSy($src); $x = $widht/2; $y = $height/2; $dst = ImageCreateTrueColor($x,$y); ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$widht,$height); header('Content-Type : image/png'); ImagePNG($det); ?>
在php中如何改变jpg图像文件的尺寸大小
<? function resize_jpg($img,$w,$h){ // $thumb = imagecreate ($w, $h); $image = imagecreatefromjpeg($img); $imagedata = getimagesize($img); if ($h = "auto") $h = $w/($imagedata[0]/$imagedata[1]);//根据原图的纵横比得出高度! $thumb = imagecreatetruecolor ($w, $h); imagecopyresized ($thumb, $image, 0, 0, 0, 0, $w, $h, $imagedata[0], $imagedata[1]); imagejpeg($thumb); } //resize_jpg($file,$w,$h); resize_jpg("images/dsc01244.jpg",100,100); imagedestory($thumb); imagedestory($image); ?>
函数代码:
<?php /* * 图片缩略图 * $srcfile 来源图片, * $rate 缩放比,默认为缩小一半,或者具体宽度象素值 * $filename 输出图片文件名jpg * 例如: resizeimage("zt32.gif",0.1); * 例如: resizeimage("zt32.gif",250 ); * 说明:调用时直接把函数的结果放在HTML文件IMG标签中的SRC属性里 */ function resizeimage($srcfile,$rate=.5, $filename = "" ){ $size=getimagesize($srcfile); switch($size[2]){ case 1: $img=imagecreatefromgif($srcfile); break; case 2: $img=imagecreatefromjpeg($srcfile); break; case 3: $img=imagecreatefrompng($srcfile); break; default: exit; } //源图片的宽度和高度 $srcw=imagesx($img); $srch=imagesy($img); //目的图片的宽度和高度 if($size[0] <= $rate || $size[1] <= $rate){ $dstw=$srcw; $dsth=$srch; }else{ if($rate <= 1){ $dstw=floor($srcw*$rate); $dsth=floor($srch*$rate); }else { $dstw=$rate; $rate = $rate/$srcw; $dsth=floor($srch*$rate); } } //echo "$dstw,$dsth,$srcw,$srch "; //新建一个真彩色图像 $im=imagecreatetruecolor($dstw,$dsth); $black=imagecolorallocate($im,255,255,255); imagefilledrectangle($im,0,0,$dstw,$dsth,$black); imagecopyresized($im,$img,0,0,0,0,$dstw,$dsth,$srcw,$srch); // 以 JPEG 格式将图像输出到浏览器或文件 if( $filename ) { //图片保存输出 imagejpeg($im, $filename ); }else { //图片输出到浏览器 imagejpeg($im); } //释放图片 imagedestroy($im); imagedestroy($img); } ?>
在smarty中调用php内置函数的方法
php字符串分割函数explode的实例代码
php中使用preg_replace函数匹配图片并加上链接的方法
php截取字符串并保留完整xml标签的函数代码
php中存储用户ID和密码到mysql数据库的方法
php中使用preg_match_all匹配文章中的图片
php图片加水印原理(超简单的实例代码)
php图片的裁剪与缩放生成符合需求的缩略图
php判断上传的Excel文件中是否有图片及PHPExcel库认识
php比较多维数组中值的大小排序实现代码
gd库图片下载类实现下载网页所有图片的php代码
php引用地址改变变量值的问题
php中通过正则表达式下载内容中的远程图片的函数代码
php的大小写敏感问题整理
PHP中usort在值相同时改变原始位置问题的解决方法
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
linux下使用ThinkPHP需要注意大小写导致的问题
PHP数组操作汇总 php数组的使用技巧
php中用foreach来操作数组的代码
PHP Undefined index报错的修复方法
php max_execution_time执行时间问题
PHP写杨辉三角实例代码
php中截取中文字符串的代码小结
php中随机显示图片的函数代码
使用php shell命令合并图片的代码
php统计文件大小,以GB、MB、KB、B输出
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
PHP与C#分别格式化文件大小的代码
php 生成文字png图片的代码
PHP用GD库生成高质量的缩略图片
php批量缩放图片的代码[ini参数控制]
Php Image Resize图片大小调整的函数代码
php 智能404跳转代码,适合换域名没改变目录的网站
PHP stristr() 函数(不区分大小写的字符串查找)
php getimagesize 上传图片的长度和宽度检测代码