ThinkPHP5 génère dynamiquement des vignettes d'images
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('attachment_path'); $defaultImage = $savePath.'default.jpg'; $params = Request::instance()->param(); $module = $params['module']; // 图片所属模块 $date = $params['date']; // 图片上传日期 $original = $params['original']; // 原始图片名称(不含后缀) $width = $params['width']; // 目标图片宽度 $height = $params['height']; // 目标图片高度 $ext = $params['ext']; // 图片后缀 $originName = sprintf('%s%s/%s/%s.%s',$savePath,$module,$date,$original,$ext); $targetName = sprintf('%s%s/%s/%s_%s_%s.%s',$savePath,$module,$date,$original,$width,$height,$ext); if (!file_exists($originName)) { $originName = $defaultImage; $targetName = sprintf('%sdefault_%s_%s.jpg',$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['type']; header('content-type:'.$this->info['mime']); if ('jpeg' == $type || 'jpg' == $type) { //JPEG图像设置隔行扫描 imageinterlace($this->im, $interlace); imagejpeg($this->im, null, $quality); } elseif ('gif' == $type && !empty($this->gif)) { imagegif($this->im, null); } elseif ('png' == $type) { //设定保存完整的 alpha 通道信息 imagesavealpha($this->im, true); //ImagePNG生成图像的质量范围从0到9的 imagepng($this->im, null, min((int) ($quality / 10), 9)); } else { $fun = 'image' . $type; $fun($this->im, ''); } exit; }
5、访问示例
在浏览器中输入:http://域名/public/upload/news/20190325/442b8dba3f706cf6822c1255bcaa68de_320_240.jpg,将会看到一张宽320,高240的图片。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution à l'erreur signalée lors du déploiement de thinkphp5 dans Pagoda : 1. Ouvrez le serveur Pagoda, installez l'extension php pathinfo et activez-la ; 2. Configurez le fichier « .access » avec le contenu « RewriteRule ^(.*)$ index.php » ?s=/$1 [QSA ,PT,L]”; 3. Dans la gestion du site Web, activez simplement le pseudo-statique de thinkphp.

Solution pour que la réécriture d'URL thinkphp5 ne fonctionne pas : 1. Vérifiez si le module mod_rewrite.so est chargé dans le fichier de configuration httpd.conf ; 2. Remplacez None dans AllowOverride None par All ; (.*)$ index.php [L,E=PATH_INFO:$1]" et enregistrez-le.

Méthodes permettant à thinkphp5 d'obtenir l'URL demandée : 1. Utilisez la méthode "$request = Request::instance();" de la classe "\think\Request" pour obtenir les informations actuelles sur l'URL ; fonction "$request-> url()" pour obtenir l'adresse URL complète incluant le nom de domaine.

thinkphp5 post ne peut pas obtenir de valeur car TP5 utilise la fonction strpos pour trouver la chaîne app/json dans la valeur de type de contenu de l'en-tête. La solution consiste à définir la valeur de type de contenu de l'en-tête sur app/json.

Comment supprimer l'icône de la barre de titre thinkphp5 : 1. Recherchez le fichier favicon.ico sous le framework thinkphp5 public. 2. Supprimez le fichier ou choisissez une autre image pour le renommer en favicon.ico et remplacez le fichier favicon.ico d'origine.

Solution pour thinkphp5 indiquant que le contrôleur n'existe pas : 1. Vérifiez si l'espace de noms dans le contrôleur correspondant est écrit correctement et remplacez-le par le bon espace de noms ; 2. Ouvrez le fichier tp correspondant et modifiez le nom de la classe.

Comment interroger les données d'hier dans ThinkPHP5 : 1. Ouvrez les fichiers liés à ThinkPHP5 ; 2. Interrogez les données d'hier via l'expression "db('table')->whereTime('c_time', 'hier')->select();" .

Comment définir les invites d'erreur dans thinkphp5 : 1. Entrez le dossier public dans le répertoire racine du projet et ouvrez le fichier d'entrée index.php ; 2. Affichez les commentaires sur le commutateur de mode de débogage ; 3. Ajustez la valeur de la constante "APP_DEBUG" ; sur true pour afficher l'invite de message d'erreur.
