


Comment optimiser les images pour obtenir la largeur et la hauteur en php
Cet article vous présentera comment obtenir la largeur et la hauteur des images optimisées en php. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
php Optimisation de la largeur et de la hauteur d'acquisition d'image
Exigences
Devrait être Exigences frontales, lors de la saisie des détails de l'article, toutes les images doivent être remplacées par des espaces réservés, et les espaces réservés doivent correspondre aux informations de l'image (il faut principalement connaître la largeur et la hauteur)
Objectif : créer un effet de fenêtre flottante en cliquant sur l'image
Plan de mise en œuvre
Avant optimisation
Faites correspondre régulièrement les images, puis bouclez pour obtenir la largeur et la hauteur de chaque image
Problème : si l'article contient moins d'images, l'opération ci-dessus n'est pas un gros problème. Mais une fois qu'il y a trop de photos, l'efficacité sera très faible
Le code est le suivant :
preg_match_all('/<img.*? src="(.*?)".*?>/is', $str, $matchs); if(!empty($matchs[0])){ $pics = []; $i = 0; foreach ($matchs[0] as $key => $m) { $fileInfo = file_get_contents($matchs[1][$key] . '?x-oss-process=image/info'); $fileInfo = json_decode($fileInfo, true); $data['Width'] = $fileInfo['ImageWidth']['value']; $data['Height'] = $fileInfo['ImageHeight']['value']; $imgs[$i]['ref'] = '<!--IMG#' . $key . '-->'; $imgs[$i]['pixel'] = $data['Width'] . '*' . $data['Height']; preg_match('/alt="(.*?)"/i', $matchs[0][$key], $mt); $imgs[$i]['alt'] = isset($mt[1]) ? $mt[1] : ''; //图片alt $imgs[$i]['src'] = $matchs[1][$key]; //图片地址 $str = str_replace($m, '<!--IMG#' . $key . '-->', $str); $i++; } }
Idées d'optimisation
Je me demande s'il existe un moyen d'obtenir des photos très vite ? J'ai trouvé des informations sur Internet, qui lisent essentiellement une partie des informations du fichier de l'image sans télécharger/lire l'intégralité de l'image. J'ai trouvé une bibliothèque de classes : [https://github.com/tommoor/fastimage](https://github.com/tommoor/fastimage) et je l'ai essayée. Par rapport à l'idée précédente (téléchargement complet des images), il y a effectivement une amélioration des performances. Les amis intéressés peuvent l'essayer. Si vous souhaitez obtenir des informations à partir d'une seule image, cela reste fortement recommandé. Mais l'implémentation par lots semble incapable d'atteindre l'objectif
En analysant les opérations ci-dessus, en fait, le processus lent devrait toujours rester dans la boucle pour obtenir des ressources d'image. Alors réfléchissons-y différemment, est-ce que je peux recevoir des photos par lots ? Montez le code
preg_match_all('/<img.*? src="(.*?)".*?>/is', $str, $matchs); if(!empty($matchs[0])){ //$time = microtime(true); //echo ' ---- start ' . PHP_EOL; foreach ($matchs[0] as $key => $m) { $urls[] = $matchs[1][$key] . '?x-oss-process=image/info'; } $imageInfos = batchCurl($urls); $i = 0; foreach ($matchs[0] as $key => $m) { $image = json_decode($imageInfos[$key], true); $_img['Width'] = $width= $image['ImageWidth']['value']; $_img['Height'] = $height = $image['ImageHeight']['value']; $imgs[$i]['ref'] = '<!--IMG#' . $key . '-->'; $imgs[$i]['pixel'] = $_img['Width'] . '*' . $_img['Height']; preg_match('/alt="(.*?)"/i', $matchs[0][$key], $mt); $imgs[$i]['alt'] = isset($mt[1]) ? $mt[1] : ''; //图片alt $imgs[$i]['src'] = $matchs[1][$key]; //图片地址 $str = str_replace($m, '<!--IMG#' . $key . '-->', $str); $i++; } //echo " ---- end px in " . (microtime(true)-$time) . " seconds \n"; //exit; } function batchCurl($urls) { $res = $conn = []; // 创建批处理cURL句柄 $mh = curl_multi_init(); foreach ($urls as $i => $url) { // 创建一对cURL资源 $conn[$i] = curl_init(); // 设置URL和相应的选项 curl_setopt($conn[$i], CURLOPT_URL, $url); curl_setopt($conn[$i], CURLOPT_HEADER, 0); curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1); curl_setopt($conn[$i], CURLOPT_TIMEOUT, 10); // 302跳转 curl_setopt($conn[$i], CURLOPT_FOLLOWLOCATION, 1); // 增加句柄 curl_multi_add_handle($mh, $conn[$i]); } $active = null; //防卡死写法:执行批处理句柄 do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } foreach ($urls as $i => $url) { //获取当前解析的cURL的相关传输信息 $info = curl_multi_info_read($mh); //获取请求头信息 $heards = curl_getinfo($conn[$i]); //获取输出的文本流 $res[$i] = curl_multi_getcontent($conn[$i]); // 移除curl批处理句柄资源中的某个句柄资源 curl_multi_remove_handle($mh, $conn[$i]); //关闭cURL会话 curl_close($conn[$i]); } //关闭全部句柄 curl_multi_close($mh); return $res; }
3. Testez les performances, l'efficacité de 20 images peut presque atteindre le deuxième niveau

Recommandé apprentissage :tutoriel vidéo php
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)

Sujets chauds

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.
