首页 php教程 php手册 [分享]一个强大的图片缩放类,支持填充缩放模式

[分享]一个强大的图片缩放类,支持填充缩放模式

Jun 06, 2016 pm 08:07 PM
分享 图片 填充 我们 截图 支持 模式 缩放

我们在截图的时候,如果给定的尺寸比例与原图比例不等,那么情况就是缩略出来的图片总有一边是不理想的, 可能高度不够,也可能宽度不够,最近项目用到图片缩放,发现了这个问题,于是重写了框架里的图片缩放方法,大家可能都知道电脑设置壁纸模式的时候有一

我们在截图的时候,如果给定的尺寸比例与原图比例不等,那么情况就是缩略出来的图片总有一边是不理想的, 可能高度不够,也可能宽度不够,最近项目用到图片缩放,发现了这个问题,于是重写了框架里的图片缩放方法,大家可能都知道电脑设置壁纸模式的时候有一项为“填充”,这种模式保证了你的屏幕不会出现空白,图片会自动调整到填满屏幕大小,那么下面这个方法加入了这一种模式,保证你需要的尺寸一定会有图,而不是出现黑边或者尺寸不理想等情况。

启用填充模式需要设置:$scaleMode=false;

以下方法只是框架图片类中的一部分:

???????? /**
???????? * 生成缩略图
???????? * @author Joychao
???????? * @static
???????? * @param string  $image?????????原图
???????? * @param string  $type??????????图像格式
???????? * @param string  $maxWidth????? 目标最大宽度
???????? * @param string  $maxHeight?????目标最大高度
???????? * @param string  $prefix????????目标后缀
???????? * @param boolean $scaleMode??   按比例切割模式
???????? * @param boolean $saveImg?????  生成后是否保存文件
???????? * @param boolean $interlace???? 启用隔行扫描
???????? * @return void 
???????? */
??????? static function thumbnail($image,$type='',$maxWidth=200,$maxHeight=50,$prefix='_thumb',$scaleMode=false,$saveImg=true,$interlace=true)
??????? {
??????????? // 获取原图信息
??????????? $info? = self::getInfo($image);
??????????? if($info !== false) {
??????????????? $srcWidth? = $info['width'];
??????????????? $srcHeight = $info['height'];
??????????????? $type = empty($type)?$info['type']:$type;
??????????????? $type = strtolower($type);
??????????????? $interlace? =? $interlace? 1:0;
??????????????? unset($info);
??????????????? // 载入原图
??????????????? $createFun = 'Imagecreatefrom'.($type=='jpg'?'jpeg':$type);
??????????????? $srcImg???? = $createFun($image);
??????????????? if($scaleMode){//按比例切图
??????????????????? $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight); // 计算缩放比例
??????????????????? if($scale>=1) {
??????????????????????? // 超过原图大小不再缩略
??????????????????????? $width?? =? $srcWidth;
??????????????????????? $height? =? $srcHeight;
??????????????????? }else{
??????????????????????? // 缩略图尺寸
??????????????????????? $width? = (int)($srcWidth*$scale);
??????????????????????? $height = (int)($srcHeight*$scale);
??????????????????? }
??????????????? }else{//不按比例切图
??????????????????? $newScale=$maxWidth/$maxHeight;
??????????????????? $srcScale=$srcWidth/$srcHeight;
??????????????????? if($srcScale>=$newScale){
??????????????????????? $height=$maxHeight;
??????????????????????? $width=intval($height*($srcWidth/$srcHeight));
??????????????????? }else{
??????????????????????? $width=$maxWidth;
??????????????????????? $height=intval($width/($srcWidth/$srcHeight));
??????????????????? }
??????????????????? $thumbImgFirst = imagecreatetruecolor($width, $height);
??????????????????? imagecopyresampled($thumbImgFirst, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight);
??????????????????? if($srcScale>=$newScale){
??????????????????????? //原图起点
??????????????????????? $startX=intval(($width-$maxWidth)*0.5);
??????????????????????? $startY=0;
??????????????????????? $width=$maxWidth;
??????????????????? }else{
??????????????????????? //原图起点
??????????????????????? $startX=0;
??????????????????????? $startY=intval(($height-$maxHeight)*0.5);
??????????????????????? $height=$maxHeight;
??????????????????? }
??????????????? }
??????????????? //创建缩略图
??????????????? if($type!='gif' && function_exists('imagecreatetruecolor')){
??????????????????? $thumbImg = imagecreatetruecolor($width, $height);
??????????????? }else{
??????????????????? $thumbImg = imagecreate($width, $height);
??????????????? }
??????????????? // 复制图片
??????????????? if(!$scaleMode){
??????????????????? imagecopymerge($thumbImg, $thumbImgFirst, 0, 0, $startX, $startY, $width, $height, 100);
??????????????? }else{
??????????????????? if(function_exists("Imagecopyresampled")){
??????????????????????? imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth,$srcHeight);
??????????????????? }else{
??????????????????????? imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height,? $srcWidth,$srcHeight);
?????????????????? }
??????????????? }
??????????????? if('gif'==$type || 'png'==$type) {
??????????????????? $background_color = imagecolorallocate($thumbImg,? 0,255,0);? //指派一个绿色
??????????????????? imagecolortransparent($thumbImg,$background_color);? //设置为透明色,若注释掉该行则输出绿色的图
??????????????? }
??????????????? // 对jpeg图形设置隔行扫描
??????????????? if('jpg'==$type || 'jpeg'==$type)
??????????????????? imageinterlace($thumbImg,$interlace);
??????????????? // 生成图片保存
??????????????? $imageFun = 'image'.($type=='jpg'?'jpeg':$type);
??????????????? $thumbName=preg_replace('/(\.\w+)$/', $prefix.'\\1', $image);??? //abs_thumb.jpg
??????????????? if($saveImg)//是否需要保存文件
??????????????????? $imageFun($thumbImg,$thumbName);
??????????????? else
??????????????????? $imageFun($thumbImg);
??????????????? imagedestroy($thumbImg);
??????????????? imagedestroy($srcImg);
??????????????? return $thumbName;
??????????? }
??????????? return false;
??????? }
????? /**
???????? * 获取图片信息
???????? * @static
???????? * @param string $path 图片路径
???????? * @return array
???????? */
??????? static function getInfo($path){
??????????? $arr=getimagesize($path);
??????????? $info['width']=$arr[0];
??????????? $info['height']=$arr[1];
??????????? $info['mime']=$arr['mime'];
??????????? return $info;
??????? }
登录后复制

如果在使用过程中遇到什么问题请留言或评论。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
两个点博物馆:所有展览以及在哪里可以找到它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

小红书发布自动保存图片怎么解决?发布自动保存图片在哪里? 小红书发布自动保存图片怎么解决?发布自动保存图片在哪里? Mar 22, 2024 am 08:06 AM

随着社交媒体的不断发展,小红书已经成为越来越多年轻人分享生活、发现美好事物的平台。许多用户在发布图片时遇到了自动保存的问题,这让他们感到十分困扰。那么,如何解决这个问题呢?一、小红书发布自动保存图片怎么解决?1.清除缓存首先,我们可以尝试清除小红书的缓存数据。步骤如下:(1)打开小红书,点击右下角的“我的”按钮;(2)在个人中心页面,找到“设置”并点击;(3)向下滚动,找到“清除缓存”选项,点击确认。清除缓存后,重新进入小红书,尝试发布图片看是否解决了自动保存的问题。2.更新小红书版本确保你的小

抖音评论里怎么发图片?评论区图片入口在哪里? 抖音评论里怎么发图片?评论区图片入口在哪里? Mar 21, 2024 pm 09:12 PM

随着抖音短视频的火爆,用户们在评论区互动变得更加丰富多彩。有些用户希望在评论中分享图片,以更好地表达自己的观点或情感。那么,抖音评论里怎么发图片呢?本文将为你详细解答这个问题,并为你提供一些相关的技巧和注意事项。一、抖音评论里怎么发图片?1.打开抖音:首先,你需要打开抖音APP,并登录你的账号。2.找到评论区:在浏览或发布短视频时,找到想要评论的地方,点击“评论”按钮。3.输入评论内容:在评论区输入你的评论内容。4.选择发送图片:在输入评论内容的界面,你会看到一个“图片”按钮或者“+”号按钮,点

iPhone上的Safari缩小问题:这是修复程序 iPhone上的Safari缩小问题:这是修复程序 Apr 20, 2024 am 08:08 AM

如果您无法控制Safari中的缩放级别,完成工作可能会非常棘手。因此,如果Safari看起来被缩小了,那对您来说可能会有问题。您可以通过以下几种方法解决Safari中的这个缩小小问题。1.光标放大:在Safari菜单栏中选择“显示”>“放大光标”。这将使光标在屏幕上更加显眼,从而更容易控制。2.移动鼠标:这可能听起来很简单,但有时只需将鼠标移动到屏幕上的另一个位置,可能会自动恢复正常大小。3.使用键盘快捷键修复1–重置缩放级别您可以直接从Safari浏览器控制缩放级别。步骤1–当您在Safari

ppt怎么让图片一张一张出来 ppt怎么让图片一张一张出来 Mar 25, 2024 pm 04:00 PM

在PowerPoint中,让图片逐一显示是一种常用的技巧,可以通过设置动画效果来实现。本指南详细介绍了实现这一技巧的步骤,包括基本设置、图片插入、添加动画、调整动画顺序和时间。此外,还提供了高级设置和调整,例如使用触发器、调整动画速度和顺序,以及预览动画效果。通过遵循这些步骤和技巧,用户可以轻松地在PowerPoint中设置图片逐一出现,从而提升演示文稿的视觉效果并吸引观众的注意力。

win10电脑截图时出现黑屏怎么办_win10电脑截图时出现黑屏的处理方法 win10电脑截图时出现黑屏怎么办_win10电脑截图时出现黑屏的处理方法 Mar 27, 2024 pm 01:01 PM

1、按下win键+r键,输入regedit,点击确定。2、在打开的注册表编辑器窗口,依次展开:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGraphicsDriversDCI,选中右边的Timeout双击。3、然后把【数值数据】中的7改为0,确定退出即可。

iPhone屏幕截图不起作用:如何修复 iPhone屏幕截图不起作用:如何修复 May 03, 2024 pm 09:16 PM

屏幕截图功能在您的iPhone上不起作用吗?截屏非常简单,因为您只需同时按住“提高音量”按钮和“电源”按钮即可抓取手机屏幕。但是,还有其他方法可以在设备上捕获帧。修复1–使用辅助触摸使用辅助触摸功能截取屏幕截图。步骤1–转到您的手机设置。步骤2–接下来,点击以打开“辅助功能”设置。步骤3–打开“触摸”设置。步骤4–接下来,打开“辅助触摸”设置。步骤5–打开手机上的“辅助触摸”。步骤6–打开“自定义顶级菜单”以访问它。步骤7–现在,您只需将这些功能中的任何一个链接到屏幕捕获即可。因此,点击那里的首

网易云音乐怎么分享到微信朋友圈_网易云音乐分享到微信朋友圈教程 网易云音乐怎么分享到微信朋友圈_网易云音乐分享到微信朋友圈教程 Mar 25, 2024 am 11:41 AM

1、首先我们进入到网易云音乐中,然后在软件首页界面中,点击进入到歌曲的播放界面中。2、然后在歌曲播放界面中,找到右上方的分享功能按钮,如下图红框所示位置,点击选择分享的渠道;在分享渠道中,点击底部的“分享至”选项,然后选择第一个“微信朋友圈”,即可将内容分享至微信朋友圈。

Win8如何利用快捷键进行截图? Win8如何利用快捷键进行截图? Mar 28, 2024 am 08:33 AM

Win8如何利用快捷键进行截图?在日常使用电脑的过程中,我们经常需要对屏幕上的内容进行截图。对于Windows8系统的用户来说,通过快捷键进行截图是一个方便且高效的操作方式。在这篇文章中,我们将介绍Windows8系统中几种常用的快捷键进行截图的方法,帮助大家更快速地进行屏幕截图操作。第一种方法是使用“Win键+PrintScreen键”组合键来进行全

See all articles