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 相关文章推荐
用header 发送cookie的php代码
Mar 16 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
php获取某个目录大小的代码
Sep 10 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
Dec 06 PHP
谈谈新手如何学习PHP 默默经典版本
Aug 04 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
Aug 15 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
PHP、Java des加密解密实例
Apr 27 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
php接口隔离原则实例分析
Nov 11 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 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
文章推荐系统(三)
2006/10/09 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
jquery里的each使用方法详解
2010/12/22 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
服务中心夜班服务员岗位职责
2013/11/27 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
活动总结模板
2014/05/09 职场文书
学前班学生评语
2014/12/29 职场文书
教师师德表现自我评价
2015/03/05 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
MySQL窗口函数的具体使用
2021/11/17 MySQL