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 기반 앱

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Xiaohongshu에 게시할 때 사진이 자동으로 저장되는 문제를 해결하는 방법은 무엇입니까? 포스팅 시 자동으로 저장되는 이미지는 어디에 있나요? Xiaohongshu에 게시할 때 사진이 자동으로 저장되는 문제를 해결하는 방법은 무엇입니까? 포스팅 시 자동으로 저장되는 이미지는 어디에 있나요? Mar 22, 2024 am 08:06 AM

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

TikTok 댓글에 사진을 게시하는 방법은 무엇입니까? 댓글란에 있는 사진의 입구는 어디인가요? TikTok 댓글에 사진을 게시하는 방법은 무엇입니까? 댓글란에 있는 사진의 입구는 어디인가요? Mar 21, 2024 pm 09:12 PM

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

iPhone 스크린샷이 작동하지 않음: 해결 방법 iPhone 스크린샷이 작동하지 않음: 해결 방법 May 03, 2024 pm 09:16 PM

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

win10 컴퓨터에서 스크린샷을 찍을 때 검은 화면이 나타날 경우 대처 방법_win10 컴퓨터에서 스크린샷을 찍을 때 검은 화면이 나타나는 경우 대처 방법 win10 컴퓨터에서 스크린샷을 찍을 때 검은 화면이 나타날 경우 대처 방법_win10 컴퓨터에서 스크린샷을 찍을 때 검은 화면이 나타나는 경우 대처 방법 Mar 27, 2024 pm 01:01 PM

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

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에서 그림이 차례로 표시되도록 쉽게 설정할 수 있으므로 프레젠테이션의 시각적 효과가 향상되고 청중의 관심을 끌 수 있습니다.

NetEase Cloud Music을 WeChat Moments에 공유하는 방법_NetEase Cloud Music을 WeChat Moments에 공유하는 방법에 대한 튜토리얼 NetEase Cloud Music을 WeChat Moments에 공유하는 방법_NetEase Cloud Music을 WeChat Moments에 공유하는 방법에 대한 튜토리얼 Mar 25, 2024 am 11:41 AM

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

Win8에서 바로가기 키를 사용하여 스크린샷을 찍는 방법은 무엇입니까? Win8에서 바로가기 키를 사용하여 스크린샷을 찍는 방법은 무엇입니까? Mar 28, 2024 am 08:33 AM

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

See all articles