[分享]一个强大的图片缩放类,支持填充缩放模式
我们在截图的时候,如果给定的尺寸比例与原图比例不等,那么情况就是缩略出来的图片总有一边是不理想的, 可能高度不够,也可能宽度不够,最近项目用到图片缩放,发现了这个问题,于是重写了框架里的图片缩放方法,大家可能都知道电脑设置壁纸模式的时候有一
我们在截图的时候,如果给定的尺寸比例与原图比例不等,那么情况就是缩略出来的图片总有一边是不理想的, 可能高度不够,也可能宽度不够,最近项目用到图片缩放,发现了这个问题,于是重写了框架里的图片缩放方法,大家可能都知道电脑设置壁纸模式的时候有一项为“填充”,这种模式保证了你的屏幕不会出现空白,图片会自动调整到填满屏幕大小,那么下面这个方法加入了这一种模式,保证你需要的尺寸一定会有图,而不是出现黑边或者尺寸不理想等情况。
启用填充模式需要设置:$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; ??????? }
如果在使用过程中遇到什么问题请留言或评论。
原文地址:[分享]一个强大的图片缩放类,支持填充缩放模式, 感谢原作者分享。

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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

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

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