PHP图片自动裁切应对不同尺寸的显示
发布时间:2022-07-22 13:02 所属栏目:121 来源:互联网
导读:如果做过那种门户站的朋友,肯定知道,一张图片可能会在不同的地方显示,大小不同,比例也不同, 如果只用一张图的话,那么肯定会变形,而且在显示小图的地方,链接 大图,又太浪费了.....用缩略图来处理,也不完美,因为每个地方出现的比例 大小可能都不一样 ,举个例子
如果做过那种门户站的朋友,肯定知道,一张图片可能会在不同的地方显示,大小不同,比例也不同, 如果只用一张图的话,那么肯定会变形,而且在显示小图的地方,链接 大图,又太浪费了.....用缩略图来处理,也不完美,因为每个地方出现的比例 大小可能都不一样 ,举个例子! 在这个地方,其实调去出来的是一个列表,但是 图片的大小是不一样的,有多大宽有的窄,,当遇到这样的情况的时候 你们怎么办呢,如果直接用原来的地址,肯定是会变形的,如果搞缩略图也不靠谱,这个调去是自动调去的,你根本不知道哪个图片需要多大的宽高, 下面进入正题: 我一直用一种方法,就是PHP 自动裁切...相比你们看到过类似那种图片地址吧 /aaaa/abc_200_100.jpg 或者/aaaa/abc_200*100.jpg 我的方式就是在需要图片地方把这个图片地址转化为 类似上面的那种地址, 然后通过apache 的rewrite 定向到一个处理程序.根据宽高生成一个图片然后保存起来, 这样做的好处有几个地方: 第一,非常灵活,在有图片地方,你需要多宽多高,都可以随意 控制,不会变形,而且程序永远会让图片内容显示的最多 第二个,当图片生成过一次的时候,apache下次就不会再重定向到程序了, 因为在规则前面 有 !d !f 这个判断,意思就是当前文件不存在的时候才会定向走,下次图片存在了,就不会再出来了 直接就是真是的图片了 不好的地方,就是生成的图片可能会比较多,占用的空间也比较大,但是如果是自己服务器 那就无所谓了,可以归类整理下 OK 奉上代码,我们就以discuz为例 代码如下: function crop_img($img, $width = 200, $height = 200) { $img_info = parse_url($img); /* 外部链接直接返回图片地址 */ if (!empty($img_info['host']) && $img_info['host'] != $_SERVER['HTTP_HOST']) { return $img; } else { $pos = strrpos($img, '.'); $img = substr($img, 0, $pos) . '_' . $width . '_' . $height . substr($img, $pos); return $img; } } function img($img,$width,$height){ $img_info = parse_url($img); /* 外部链接直接返回图片地址 */ if (!empty($img_info['host']) && $img_info['host'] != $_SERVER['HTTP_HOST']) { return $img; } else { $pos = strrpos($img, '.'); $img = substr($img, 0, $pos) . '_' . $width . '_' . $height . substr($img, $pos); echo '<img src="'.$img.'" width="'.$width.'" height="'.$height.'" />'; return ; } } 函数的用法 crop_img('原图地址','宽度','高度'); 这个函数返回处理过的图片地址,img 函数直接返回图片标签字符串,比如在discuz模板里面调用这个函数 {eval img($pic,200,100)} 这样返回的地址就是/data/attachment/forum/aaaaaa_200_100.jpg 目前来说 这个图片是不存在 那么看第二步 第二部就是image.php 这个里面的代码里 代码如下: <?php $url = $_GET['url']; $src = './data/attachment/' . preg_replace('/_(/d+)_(/d+)/', '', $url); $filename = './data/attachment/' . $url; if (file_exists($filename)) { ob_start(); header('Content-type:image/jpeg'); readfile($filename); ob_flush(); flush(); } else { if(!preg_match('/_(/d+)_(/d+)/', $url, $wh)){ defulat(); exit(); } $width = $wh[1]; $height = $wh[2]; thumb(realpath($src), $width, $height, $filename, 'crop', '85'); }。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读