PHP图片自动裁切应付不同尺寸的显示_php技巧_脚本之家【官方澳门新永利下载】,ASP固定比例裁剪缩略图的方法

一般生成缩略图的方法有两种:

如果做过那种门户站的朋友,肯定知道,一张图片可能会在不同的地方显示,大小不同,比例也不同,如果只用一张图的话,那么肯定会变形,而且在显示小图的地方,链接
大图,又太浪费了…..用缩略图来处理,也不完美,因为每个地方出现的比例
大小可能都不一样 ,举个例子!

第一种:缩放成固定大小的小图片

请看上图。在这个地方,其实调去出来的是一个列表,但是
图片的大小是不一样的,有多大宽有的窄,,当遇到这样的情况的时候
你们怎么办呢,如果直接用原来的地址,肯定是会变形的,如果搞缩略图也不靠谱,这个调去是自动调去的,你根本不知道哪个图片需要多大的宽高,——————————————————————————————————————下面进入正题:

第二种:缩放成等比例的小图片

我一直用一种方法,就是PHP 自动裁切…相比你们看到过类似那种图片地址吧
/aaaa/abc_200_100.jpg
或者/aaaa/abc_200*100.jpg我的方式就是在需要图片地方把这个图片地址转化为
类似上面的那种地址, 然后通过apache 的rewrite
定向到一个处理程序.根据宽高生成一个图片然后保存起来,这样做的好处有几个地方:

第一种方法的缺点是,会使图片变形,例如一个身材苗条的MM变成一个胖MM

第一,非常灵活,在有图片地方,你需要多宽多高,都可以随意
控制,不会变形,而且程序永远会让图片内容显示的最多第二个,当图片生成过一次的时候,apache下次就不会再重定向到程序了,
因为在规则前面 有 !d !f
这个判断,意思就是当前文件不存在的时候才会定向走,下次图片存在了,就不会再出来了
直接就是真是的图片了不好的地方,就是生成的图片可能会比较多,占用的空间也比较大,但是如果是自己服务器
那就无所谓了,可以归类整理下OK 奉上代码,我们就以discuz为例复制代码 代码如下:function crop_img($img,
$width = 200, $height = 200) {$img_info = parse_url;/*
外部链接直接返回图片地址 */if (!empty && $img_info[‘host’] !=
$_SERVER[‘HTTP_HOST’]) {return $img;} else {$pos = strrpos;$img =
substr . ‘_’ . $width . ‘_’ . $height . substr;return $img;}}function
img{$img_info = parse_url;/* 外部链接直接返回图片地址 */if (!empty
&& $img_info[‘host’] != $_SERVER[‘HTTP_HOST’]) {return $img;}
else {$pos = strrpos;$img = substr . ‘_’ . $width . ‘_’ . $height .
substr;echo ‘官方澳门新永利下载 1‘;return ;}
}函数的用法 crop_img; 这个函数返回处理过的图片地址,img
函数直接返回图片标签字符串,比如在discuz模板里面调用这个函数 {eval
img}这样返回的地址就是/data/attachment/forum/aaaaaa_200_100.jpg
目前来说 这个图片是不存在 那么看第二步第二步
需要添加apache的rewrite规则复制代码
代码如下: RewriteEngine onRewriteCond %{REQUEST_FILENAME}
!-dRewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^data/attachment/$
images.php?url=$1 [L]上面的意思,就是
data/attachement/这个地址开头不存在的文件都定向到image.php来处理,并且把url当参数传过去第三部就是image.php
这个里面的代码里复制代码 代码如下:
$thumbWidth * $sourceHeight) {$thumbHeight = floor($sourceHeight *
$width / $sourceWidth);$_y = floor(($height – $thumbHeight) / 2);} else
{$thumbWidth = floor($sourceWidth * $height / $sourceHeight);$_x =
floor( / 2);}}} else if {if ($sourceHeight < $thumbHeight) {
//如果原图尺寸小于当前尺寸 $thumbWidth = floor($thumbWidth *
$sourceHeight / $thumbHeight);$thumbHeight = $sourceHeight;}if
($sourceWidth < $thumbWidth) {$thumbHeight = floor($thumbHeight *
$sourceWidth / $thumbWidth);$thumbWidth = $sourceWidth;}$s1 =
$sourceWidth / $sourceHeight; //原图比例$s2 = $width / $height;
//新图比例if {} else if { //全高度 $y = 0;$ax = floor($sourceWidth *
($thumbHeight / $sourceHeight));$x = / 2;$w = $thumbWidth /
($thumbHeight / $sourceHeight);} else { //全宽度 $x = 0;$ay =
floor($sourceHeight * ($thumbWidth / $sourceWidth));
//模拟原图比例高度$y = / 2;$h = $thumbHeight / ($thumbWidth /
$sourceWidth);}}switch {case 2: $source = imagecreatefromjpeg;break;case
1: $source = imagecreatefromgif;break;case 3: $source =
imagecreatefrompng;break;case 6: $source =
imagecreatefromwbmp;break;default:
defulat();return;}header(“Content-type: image/jpeg”);$thumb =
imagecreatetruecolor;imagefill($thumb, 0, 0, imagecolorallocate($thumb,
255, 255, 255));imagecopyresampled($thumb, $source, 0, 0, $x, $y,
$width, $height, $w, $h);imagejpeg($thumb, null, $quality);// if
($_SERVER[‘HTTP_REFERER’] || false !==
stripos($_SERVER[‘HTTP_REFERER’], ‘http://’ .
$_SERVER[‘SERVER_NAME’])) {imagejpeg($thumb, $filename, $quality);//
}imagedestroy;imagedestroy;} catch {defulat();}}function defulat()
{$default_img =
realpath(‘media/images/nopic.jpg’);ob_start();header(‘Content-type:image/jpeg’);readfile;ob_flush;}thumb
函数 可以控制 裁切方式,scale 为等比缩放,不裁切,不够的地方
用白色填充,crop 为裁切,如果要求的宽高比
大于原图宽高比,那么就保持最大显示宽度,居中裁切上下多余部分,如果要求宽高比小于原图宽高比,那么就保持最大高度,居中裁切左右多余部分,总而言之,在保持不变形的前提下
,把图片缩小,而且最大保留图片的内容.哈哈
这个代码有多叼,试试知道了,,,当然你需要支持rewrite功能和GD2 支持

发表评论

电子邮件地址不会被公开。 必填项已用*标注