PHP 프레임워크 ThinkPHP ThinkPHP5는 이미지 썸네일을 동적으로 생성합니다.

ThinkPHP5는 이미지 썸네일을 동적으로 생성합니다.

Dec 27, 2019 pm 02:12 PM
thinkphp5

ThinkPHP5动态生成图片缩略图

需求场景

不同终端(PC端、手机端、平板),不同界面(列表页、详情页),对图片大小的要求不一样, 如果所有场景下都使用同一尺寸的图片,势必对会网络带宽及服务器性能造成一定的影响,由此需要服务器端能够根据前端的请求参数,自动匹配出相对应的图片资源,以此来降低服务端的压力,同时也能给用户带来更友好的用户体验。

具体步骤如下: 

1、开启apache的rewrite功能,具体方法请自行百度。

2、修改.htaccess

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On
 
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^public/upload/(.*)/(.*)/(.*)_(\d+)_(\d+).(png|jpg|jpeg|gif)$ /index.php/api/Attachment/thumbnail/module/$1/date/$2/original/$3/width/$4/height/$5/ext/$6 [L,R]
 
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
로그인 후 복사

以上配置规则表示,如果存在对应的图片资源,则由apache直接返回,如果不存在,则转发给/index.php/api/Attachment/thumbnail处理器去处理。

其它参数说明:

$1:图片所属模块

$2:图片上传日期

$3:原始图片名称(不含后缀)

$4:目标图片宽度

$5:目标图片高度

$6:图片后缀

友情提示:根据图片存储规则的不同,此处的配置规则及参数可以作相应的调整。

3、新增缩略图处理程序,此处为Attachment 文件,内容如下:

public function thumbnail() {
        $savePath = Config::get(&#39;attachment_path&#39;);
        $defaultImage = $savePath.&#39;default.jpg&#39;;
        $params = Request::instance()->param();
        $module = $params[&#39;module&#39;];  // 图片所属模块
        $date = $params[&#39;date&#39;];      // 图片上传日期
        $original = $params[&#39;original&#39;]; // 原始图片名称(不含后缀)
        $width = $params[&#39;width&#39;];    // 目标图片宽度
        $height = $params[&#39;height&#39;];  // 目标图片高度
        $ext = $params[&#39;ext&#39;];        // 图片后缀
        $originName = sprintf(&#39;%s%s/%s/%s.%s&#39;,$savePath,$module,$date,$original,$ext);
        $targetName = sprintf(&#39;%s%s/%s/%s_%s_%s.%s&#39;,$savePath,$module,$date,$original,$width,$height,$ext);
        if (!file_exists($originName)) {
            $originName = $defaultImage;
            $targetName = sprintf(&#39;%sdefault_%s_%s.jpg&#39;,$savePath,$width,$height);
        }
        $image = Image::open($originName);
        $thumb = $image->thumb($width, $height);
        if (!file_exists($targetName)) {
            $thumb->save($targetName);
        }
        $thumb->preview();
    }
로그인 후 복사

4、vendor/topthink/think-image/src/Image.php文件中新增一个方法,内容如下:

/**
     * 预览图像
     * @param int         $quality   图像质量
     * @param bool        $interlace 是否对JPEG类型图像设置隔行扫描
     * @return $this
     */
    public function preview($quality = 100, $interlace = true)
    {
        $type = $this->info[&#39;type&#39;];
        header(&#39;content-type:&#39;.$this->info[&#39;mime&#39;]);
        if (&#39;jpeg&#39; == $type || &#39;jpg&#39; == $type) {
            //JPEG图像设置隔行扫描
            imageinterlace($this->im, $interlace);
            imagejpeg($this->im, null, $quality);
        } elseif (&#39;gif&#39; == $type && !empty($this->gif)) {
            imagegif($this->im, null);
        } elseif (&#39;png&#39; == $type) {
            //设定保存完整的 alpha 通道信息
            imagesavealpha($this->im, true);
            //ImagePNG生成图像的质量范围从0到9的
            imagepng($this->im, null, min((int) ($quality / 10), 9));
        } else {
            $fun = &#39;image&#39; . $type;
            $fun($this->im, &#39;&#39;);
        }
       exit;
    }
로그인 후 복사

5、访问示例

在浏览器中输入:http://域名/public/upload/news/20190325/442b8dba3f706cf6822c1255bcaa68de_320_240.jpg,将会看到一张宽320,高240的图片。

위 내용은 ThinkPHP5는 이미지 썸네일을 동적으로 생성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Pagoda에 thinkphp5를 배포할 때 오류가 발생하면 어떻게 해야 합니까? Pagoda에 thinkphp5를 배포할 때 오류가 발생하면 어떻게 해야 합니까? Dec 19, 2022 am 11:04 AM

Pagoda에 thinkphp5를 배포할 때 보고된 오류에 대한 해결 방법: 1. Pagoda 서버를 열고 php pathinfo 확장을 설치하고 활성화합니다. 2. "RewriteRule ^(.*)$ index.php 콘텐츠로 ".access" 파일을 구성합니다. ?s=/$1 [QSA ,PT,L]”; 3. 웹사이트 관리에서 thinkphp의 pseudo-static을 활성화하면 됩니다.

thinkphp5 URL 재작성이 실패하면 어떻게 해야 합니까? thinkphp5 URL 재작성이 실패하면 어떻게 해야 합니까? Dec 12, 2022 am 09:31 AM

thinkphp5 URL 재작성이 작동하지 않는 해결 방법: 1. mod_rewrite.so 모듈이 httpd.conf 구성 파일에 로드되었는지 확인합니다. 2. AllowOverride None에서 None을 All로 변경합니다. 3. Apache 구성 파일 .htaccess를 "RewriteRule ^ (.*)$ index.php [L,E=PATH_INFO:$1]" 하고 저장하세요.

thinkphp5에서 요청된 URL을 얻는 방법 thinkphp5에서 요청된 URL을 얻는 방법 Dec 20, 2022 am 09:48 AM

요청된 URL을 얻는 thinkphp5의 방법: 1. 현재 URL 정보를 얻기 위해 "\think\Request" 클래스의 "$request = Request::instance();" 방법을 사용합니다. 도메인 이름을 포함한 전체 URL 주소를 얻으려면 "$request-> url()" 함수를 사용하세요.

thinkphp5 게시물이 값을 얻을 수 없으면 어떻게 해야 합니까? thinkphp5 게시물이 값을 얻을 수 없으면 어떻게 해야 합니까? Dec 06, 2022 am 09:29 AM

thinkphp5 게시물은 TP5가 strpos 함수를 사용하여 헤더의 콘텐츠 유형 값에서 app/json 문자열을 찾기 때문에 값을 얻을 수 없습니다. 해결 방법은 헤더의 콘텐츠 유형 값을 app/json으로 설정하는 것입니다.

thinkphp5 제목 표시줄 아이콘을 제거하는 방법 thinkphp5 제목 표시줄 아이콘을 제거하는 방법 Dec 20, 2022 am 09:24 AM

thinkphp5 제목 표시줄 아이콘을 제거하는 방법: 1. thinkphp5 프레임워크 공개에서 favicon.ico 파일을 찾습니다. 2. 파일을 삭제하거나 다른 사진을 선택하여 이름을 favicon.ico로 바꾸고 원본 favicon.ico 파일을 대체합니다.

thinkphp5에서 컨트롤러가 존재하지 않는다는 메시지가 표시되면 어떻게 해야 합니까? thinkphp5에서 컨트롤러가 존재하지 않는다는 메시지가 표시되면 어떻게 해야 합니까? Dec 06, 2022 am 10:43 AM

컨트롤러가 존재하지 않는다고 메시지를 표시하는 thinkphp5에 대한 해결 방법: 1. 해당 컨트롤러의 네임스페이스가 올바르게 작성되었는지 확인하고 올바른 네임스페이스로 변경합니다. 2. 해당 tp 파일을 열고 클래스 이름을 수정합니다.

ThinkPHP5에서 어제의 데이터를 쿼리하는 방법 ThinkPHP5에서 어제의 데이터를 쿼리하는 방법 Dec 05, 2022 am 09:20 AM

ThinkPHP5에서 어제의 데이터를 쿼리하는 방법: 1. ThinkPHP5 관련 파일을 엽니다. 2. "db('table')->whereTime('c_time', 'yesterday')->select();" 표현식을 통해 어제의 데이터를 쿼리할 수 있습니다. .

thinkphp5에서 오류 프롬프트를 설정하는 방법 thinkphp5에서 오류 프롬프트를 설정하는 방법 Dec 07, 2022 am 10:31 AM

thinkphp5에서 오류 프롬프트를 설정하는 방법: 1. 프로젝트 루트 디렉터리에 있는 public 폴더를 입력하고 index.php 항목 파일을 엽니다. 2. 디버그 모드 스위치에 대한 설명을 봅니다. 3. "APP_DEBUG" 상수 값을 조정합니다. 오류 메시지 프롬프트를 표시하려면 true로 설정합니다.

See all articles