How to display images in different sizes in php

(*-*)浩
Release: 2023-02-26 17:12:01
Original
2763 people have browsed it

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

How to display images in different sizes in php

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

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

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

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

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 ''; return ; } }
Copy after login

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

这样返回的地址就是/data/attachment/forum/aaaaaa_200_100.jpg 目前来说 这个图片是不存在 那么看第二步

第二步 需要添加apache的rewrite规则

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^data/attachment/(.*)$ images.php?url=$1 [L] 
Copy after login

上面的意思,就是 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(($width - $thumbWidth) / 2); } } } else if ($mode == 'crop') { 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 ($s1 == $s2) { } else if ($s1 > $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(); }
Copy after login

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

The above is the detailed content of How to display images in different sizes in php. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!