php怎么对图片不同尺寸显示

一张图片可能会在不同的地方显示,大小不同,比例也不同,因此本例介绍的这个图片自动裁切还是比较有用的,有需求的朋友可以看看

php怎么对图片不同尺寸显示

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

PHP自动裁切相比你们看到过类似那种图片地址/aaaa/abc_200_100.jpg 或者/aaaa/abc_200*100.jpg

我的方式就是在需要图片地方把这个图片地址转化为类似上面的那种地址, 然后通过apache 的rewrite 定向到一个处理程序。根据宽高生成一个图片然后保存起来,在不动原图的任何信息和位置的情况下对图片做处理。

立即学习“PHP免费学习笔记(深入)”;

不好的地方,就是生成的图片可能会比较多,占用的空间也比较大,但是如果是自己服务器 那就无所谓了,可以归类整理下

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 'php怎么对图片不同尺寸显示';return ;} }

登录后复制

函数的用法 crop_img(‘原图地址’,’宽度’,’高度’); 这个函数返回处理过的图片地址,img 函数直接返回图片标签字符串,比如在discuz模板里面调用这个函数 {eval img($pic,200,100)}

这样返回的地址就是/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 这个里面的代码里

<?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');}function thumb($src, $width, $height, $filename, $mode = 'scale', $quality = '100') {try {$imageValue = getimagesize($src);$sourceWidth = $imageValue[0]; //原图宽$sourceHeight = $imageValue[1]; //原图高$thumbWidth = $width; //缩略图宽$thumbHeight = $height; //缩略图高$_x = 0;$_y = 0;$w = $sourceWidth;$h = $sourceHeight;if ($mode == 'scale') {if ($sourceWidth <= $thumbWidth && $sourceHeight  $thumbWidth * $sourceHeight) {$thumbHeight = floor($sourceHeight * $width / $sourceWidth);$_y = floor(($height - $thumbHeight) / 2);} else {$thumbWidth = floor($sourceWidth * $height / $sourceHeight);$_x = floor(($width - $thumbWidth) / 2);}}} else if ($mode == 'crop') {if ($sourceHeight  $s2) { //全高度 $y = 0;$ax = floor($sourceWidth * ($thumbHeight / $sourceHeight));$x = ($ax - $thumbWidth) / 2;$w = $thumbWidth / ($thumbHeight / $sourceHeight);} else { //全宽度 $x = 0;$ay = floor($sourceHeight * ($thumbWidth / $sourceWidth)); //模拟原图比例高度$y = ($ay - $thumbHeight) / 2;$h = $thumbHeight / ($thumbWidth / $sourceWidth);}}switch ($imageValue[2]) {case 2: $source = imagecreatefromjpeg($src);break;case 1: $source = imagecreatefromgif($src);break;case 3: $source = imagecreatefrompng($src);break;case 6: $source = imagecreatefromwbmp($src);break;default: defulat();return;}header("Content-type: image/jpeg");$thumb = imagecreatetruecolor($width, $height);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($thumb);imagedestroy($source);} catch (Exception $ex) {defulat();}}function defulat() {$default_img = realpath('media/images/nopic.jpg');ob_start();header('Content-type:image/jpeg');readfile($default_img);ob_flush();flush();}

登录后复制

thumb 函数 可以控制 裁切方式,scale 为等比缩放,不裁切,不够的地方 用白色填充,crop 为裁切,如果要求的宽高比 大于原图宽高比,那么就保持最大显示宽度,居中裁切上下多余部分,如果要求宽高比小于原图宽高比,那么就保持最大高度,居中裁切左右多余部分,总而言之,在保持不变形的前提下 ,把图片缩小,而且最大保留图片的内容.哈哈 这个代码有多叼,试试知道了,,,当然你需要支持rewrite功能和GD2 支持

以上就是php怎么对图片不同尺寸显示的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2149338.html

(0)
上一篇 2025年2月25日 04:59:39
下一篇 2025年2月18日 10:42:54

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • php有map吗

    php有map吗? php有map即array_map()函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。 提示:您可…

    2025年2月25日
    200
  • php好吗

    php好吗? 随着互联网的快速的发展,php版本的升级,php功能变得更加的成熟牛逼,变得更加的好用,被称作最好的语言,几乎广泛用到各大网站开发上,更多的大型企业都有php岗位,而且待遇非常的好,就业前景比较可观。 作为开发者,php算是最…

    2025年2月25日
    200
  • php怎么读取输入

    用户在表格form中填写数据,然后提交到一个php文件,PHP文件使用函数获取数据 (推荐学习:PHP视频教程) 登录后复制 用户填写完username后提交到welcome.php文件,在welcome.php文件中,  Welcome …

    2025年2月25日
    200
  • php怎么点击按钮弹出确认框

    双选确认框,点击是跳转到yes.html,点击否跳转到no.html  (推荐学习:PHP视频教程) <?php echo " if(confirm( ‘请选择跳转页面,是跳转到yes.html  否跳转到no.html? …

    2025年2月25日
    200
  • php工作中要会什么

    php工作中要会什么? PHP程序员要求-技能要求 作为一名合格的PHPer 首先就是对PHP的热爱,俗话说:“要做好一件事,要先去理解他,然后爱他。” PHP是一种很美妙的开发语言,你不需要再为定义一个变量的类型而犹豫不定,PHP会自动判…

    2025年2月25日
    200
  • php怎么打印出大号字体

    首先,打开php编辑器,新建php文件,例如:index.php。  (推荐学习:PHP视频教程) 在index.php中,将Contact Us调整为:Contact Us。 立即学习“PHP免费学习笔记(深入)”; 浏览器运行index…

    2025年2月25日 编程技术
    200
  • PHP改文件不生效

    php改文件不生效? php文件修改后刷新没反应不生效的原因: 如果是php文件都存在这个问题,那应该是php5版本里面,php.ini文件中,默认设置了opcache.revalidate_freq的值, 把他设置为0 ,即可以解决php…

    2025年2月25日
    200
  • php怎么打补丁

    通常开发出一个系统,是肯定要经常升级的。升级就意味着对代码或者数据结构的修改,当然一般情况下一个系统开发出来应该尽量少的修改数据结构的。 那么,当别人当前使用的不是最新的版本,应该如何提供更新补丁供用户升级呢?  (推荐学习:PHP视频教程…

    2025年2月25日
    200
  • php读取mysql乱码

    php读取mysql乱码的解决办法 问题: 数据库里是中文,在网页上通过查找数据库显示如下: img/??.png 数据库里面数据为: 立即学习“PHP免费学习笔记(深入)”; img/我的.png 解决: 首先你的php网页要是UTF-8…

    2025年2月25日
    200
  • php怎么从数据库打印出图片

    无论是网站设计还是办公系统、购物商城,都需要在网页上显示图片,图片都是从数据库提取的,接下来我们看一看通过图片路径保存并显示图片的方式: 首先要在表中保存图片的路径,注意:路径是从WWW目录开始找而不是从磁盘根找,/代表WWW目录:  (推…

    2025年2月25日
    200

发表回复

登录后才能评论