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

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









소셜 미디어의 지속적인 발전으로 Xiaohongshu는 점점 더 많은 젊은이들이 자신의 삶을 공유하고 아름다운 것을 발견할 수 있는 플랫폼이 되었습니다. 많은 사용자들이 이미지 게시 시 자동 저장 문제로 고민하고 있습니다. 그렇다면 이 문제를 해결하는 방법은 무엇입니까? 1. Xiaohongshu에 게시할 때 사진이 자동으로 저장되는 문제를 해결하는 방법은 무엇입니까? 1. 캐시 지우기 먼저 Xiaohongshu의 캐시 데이터를 지워볼 수 있습니다. 단계는 다음과 같습니다. (1) Xiaohongshu를 열고 오른쪽 하단에 있는 "내" 버튼을 클릭합니다. (2) 개인 센터 페이지에서 "설정"을 찾아 클릭합니다. 캐시 지우기' 옵션을 선택하고 확인을 클릭하세요. 캐시를 삭제한 후 샤오홍슈에 다시 진입하여 사진을 올려 자동 저장 문제가 해결되었는지 확인해 보세요. 2. Xiaohongshu 버전을 업데이트하여 Xiaohongshu를 확인하세요.

Douyin 짧은 동영상의 인기로 인해 댓글 영역의 사용자 상호 작용이 더욱 다채로워졌습니다. 일부 사용자는 자신의 의견이나 감정을 더 잘 표현하기 위해 댓글로 이미지를 공유하기를 원합니다. 그렇다면 TikTok 댓글에 사진을 게시하는 방법은 무엇입니까? 이 기사에서는 이 질문에 대해 자세히 답변하고 몇 가지 관련 팁과 예방 조치를 제공합니다. 1. Douyin 댓글에 사진을 어떻게 게시하나요? 1. Douyin 열기: 먼저 Douyin 앱을 열고 계정에 로그인해야 합니다. 2. 댓글 영역 찾기: 짧은 동영상을 탐색하거나 게시할 때 댓글을 달고 싶은 위치를 찾아 "댓글" 버튼을 클릭하세요. 3. 댓글 내용 입력: 댓글 영역에 댓글 내용을 입력합니다. 4. 사진 전송 선택: 댓글 내용 입력 인터페이스에 "사진" 버튼 또는 "+" 버튼이 표시됩니다.

iPhone에서 스크린샷 기능이 작동하지 않나요? 스크린샷을 찍는 것은 매우 쉽습니다. 볼륨 높이기 버튼과 전원 버튼을 동시에 누르고 휴대폰 화면을 잡기만 하면 됩니다. 그러나 장치에서 프레임을 캡처하는 다른 방법이 있습니다. 수정 1 – 보조 터치 사용 보조 터치 기능을 사용하여 스크린샷을 찍습니다. 1단계 – 휴대폰 설정으로 이동합니다. 2단계 – 다음으로 탭하여 접근성 설정을 엽니다. 3단계 – 터치 설정을 엽니다. 4단계 – 다음으로 보조 터치 설정을 엽니다. 5단계 – 휴대폰에서 Assistive Touch를 켜세요. 6단계 – “상위 메뉴 사용자화”를 열어서 접근하세요. 7단계 – 이제 이러한 기능 중 하나를 화면 캡처에 연결하기만 하면 됩니다. 그러니 첫 번째를 클릭하세요.

1. win 키 + r 키를 누르고 regedit를 입력한 후 확인을 클릭합니다. 2. 열린 레지스트리 편집기 창에서 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGraphicsDriversDCI를 확장하고 오른쪽에서 Timeout을 선택한 후 두 번 클릭합니다. 3. 그런 다음 [숫자 데이터]의 7을 0으로 변경하고 종료를 확인합니다.

Safari에서 확대/축소 수준을 제어할 수 없으면 작업을 완료하는 것이 까다로울 수 있습니다. 따라서 Safari가 축소된 것처럼 보이면 문제가 될 수 있습니다. Safari에서 이 사소한 확대/축소 문제를 해결할 수 있는 몇 가지 방법은 다음과 같습니다. 1. 커서 확대: Safari 메뉴 표시줄에서 "디스플레이" > "커서 확대"를 선택합니다. 이렇게 하면 화면에 커서가 더 잘 보이도록 되어 제어가 더 쉬워집니다. 2. 마우스 이동: 간단해 보이지만 때로는 화면의 다른 위치로 마우스를 이동하기만 해도 자동으로 원래 크기로 돌아갈 수 있습니다. 3. 키보드 단축키 사용 수정 1 – 확대/축소 수준 재설정 Safari 브라우저에서 직접 확대/축소 수준을 제어할 수 있습니다. 1단계 – Safari에 있을 때

파워포인트에서는 그림을 하나씩 표시하는 것이 일반적인 기술인데, 이는 애니메이션 효과를 설정하면 가능하다. 이 가이드에서는 기본 설정, 이미지 삽입, 애니메이션 추가, 애니메이션 순서 및 타이밍 조정 등 이 기술을 구현하는 단계를 자세히 설명합니다. 또한 트리거 사용, 애니메이션 속도 및 순서 조정, 애니메이션 효과 미리보기 등의 고급 설정 및 조정이 제공됩니다. 이러한 단계와 팁을 따르면 사용자는 PowerPoint에서 그림이 차례로 표시되도록 쉽게 설정할 수 있으므로 프레젠테이션의 시각적 효과가 향상되고 청중의 관심을 끌 수 있습니다.

1. 먼저 NetEase Cloud Music에 들어간 다음 소프트웨어 홈페이지 인터페이스를 클릭하여 노래 재생 인터페이스로 들어갑니다. 2. 그런 다음 노래 재생 인터페이스에서 아래 그림의 빨간색 상자에 표시된 것처럼 오른쪽 상단에서 공유 기능 버튼을 찾아 공유 채널에서 공유 채널을 선택하고 다음 위치에서 "공유 대상" 옵션을 클릭합니다. 하단에서 첫 번째 "WeChat Moments"를 선택하면 WeChat Moments에 콘텐츠를 공유할 수 있습니다.

Win8에서 바로가기 키를 사용하여 스크린샷을 찍는 방법은 무엇입니까? 일상적으로 컴퓨터를 사용하다 보면 화면에 표시되는 콘텐츠의 스크린샷을 찍어야 하는 경우가 많습니다. Windows 8 시스템 사용자의 경우 단축키를 통해 스크린샷을 찍는 것이 편리하고 효율적인 작업 방법입니다. 이 기사에서는 Windows 8 시스템에서 스크린샷을 찍는 데 일반적으로 사용되는 몇 가지 바로 가기 키를 소개하여 보다 빠르게 스크린샷을 찍는 데 도움을 줍니다. 첫 번째 방법은 "Win 키 + PrintScreen 키" 키 조합을 사용하여 전체 작업을 수행하는 것입니다.
