加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP图片自动裁切应对不同尺寸的显示

发布时间:2022-07-23 22:27:56 所属栏目:PHP教程 来源:互联网
导读:如果做过那种门户站的朋友,肯定知道,一张图片可能会在不同的地方显示,大小不同,比例也不同, 如果只用一张图的话,那么肯定会变形,而且在显示小图的地方,链接 大图,又太浪费了.....用缩略图来处理,也不完美,因为每个地方出现的比例 大小可能都不一样 ,举个例
  如果做过那种门户站的朋友,肯定知道,一张图片可能会在不同的地方显示,大小不同,比例也不同,
 
  如果只用一张图的话,那么肯定会变形,而且在显示小图的地方,链接 大图,又太浪费了.....用缩略图来处理,也不完美,因为每个地方出现的比例 大小可能都不一样 ,举个例子!
 
  在这个地方,其实调去出来的是一个列表,但是 图片的大小是不一样的,有多大宽有的窄,,当遇到这样的情况的时候 你们怎么办呢,如果直接用原来的地址,肯定是会变形的,如果搞缩略图也不靠谱,这个调去是自动调去的,你根本不知道哪个图片需要多大的宽高,

  下面进入正题:
 
  我一直用一种方法,就是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');
 
  }。
 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读