PHP中改变图片的尺寸大小的代码


Posted in PHP onJuly 17, 2011

先介绍一个自己写的函数。

<?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); 
} 
?>
PHP 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
php桌面中心(二) 数据库写入
Mar 11 PHP
php学习之流程控制实现代码
Jun 09 PHP
解析php取整的几种方式
Jun 25 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
php获取根域名方法汇总
Oct 28 PHP
php 伪造ip以及url来路信息方法汇总
Nov 25 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
PHP支付宝当面付2.0代码
Dec 21 PHP
PHP反射原理与用法深入分析
Sep 28 PHP
laravel清除视图缓存的代码
Oct 23 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
php中用foreach来操作数组的代码
Jul 17 #PHP
PHP Undefined index报错的修复方法
Jul 17 #PHP
php max_execution_time执行时间问题
Jul 17 #PHP
PHP写杨辉三角实例代码
Jul 17 #PHP
php中截取中文字符串的代码小结
Jul 17 #PHP
9个PHP开发常用功能函数小结
Jul 15 #PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 #PHP
You might like
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
php连接数据库代码应用分析
2011/05/29 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
javascript实现密码验证
2015/11/10 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
详解ES6中的三种异步解决方案
2018/06/28 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
python3.8下载及安装步骤详解
2020/01/15 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
一套PHP的笔试题
2013/05/31 面试题
前台文员的岗位职责
2013/11/14 职场文书
打造完美自荐信
2014/01/24 职场文书
会计专业应届生自荐信
2014/02/07 职场文书
文员的职业生涯规划发展方向
2014/02/08 职场文书
大专学生求职信
2014/07/04 职场文书
小学国庆节活动总结
2015/03/23 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
男生贾里读书笔记
2015/06/30 职场文书
《山中访友》教学反思
2016/02/24 职场文书
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android