So zeigen Sie Bilder in verschiedenen Größen in PHP an
一张图片可能会在不同的地方显示,大小不同,比例也不同,因此本例介绍的这个图片自动裁切还是比较有用的,有需求的朋友可以看看
如果做过那种门户站的朋友,肯定知道,一张图片可能会在不同的地方显示、大小不同、比例也不同,如果只用一张图的话,那么肯定会变形,而且在显示小图的地方,链接大图,又太浪费了.....用缩略图来处理,也不完美,因为每个地方出现的比例大小可能都不一样 。 (推荐学习:PHP视频教程)
PHP自动裁切相比你们看到过类似那种图片地址/aaaa/abc_200_100.jpg 或者/aaaa/abc_200*100.jpg
我的方式就是在需要图片地方把这个图片地址转化为类似上面的那种地址, 然后通过apache 的rewrite 定向到一个处理程序。根据宽高生成一个图片然后保存起来,在不动原图的任何信息和位置的情况下对图片做处理。
不好的地方,就是生成的图片可能会比较多,占用的空间也比较大,但是如果是自己服务器 那就无所谓了,可以归类整理下
OK 奉上代码,我们就以discuz为例
function crop_img($img, $width = 200, $height = 200) { $img_info = parse_url($img); /* 外部链接直接返回图片地址 */ if (!empty($img_info['host']) && $img_info['host'] != $_SERVER['HTTP_HOST']) { return $img; } else { $pos = strrpos($img, '.'); $img = substr($img, 0, $pos) . '_' . $width . '_' . $height . substr($img, $pos); return $img; } } function img($img,$width,$height){ $img_info = parse_url($img); /* 外部链接直接返回图片地址 */ if (!empty($img_info['host']) && $img_info['host'] != $_SERVER['HTTP_HOST']) { return $img; } else { $pos = strrpos($img, '.'); $img = substr($img, 0, $pos) . '_' . $width . '_' . $height . substr($img, $pos); echo '<img src="'.$img.'" width="'.$width.'" height="'.$height.'" />'; return ; } }
函数的用法 crop_img('原图地址','宽度','高度'); 这个函数返回处理过的图片地址,img 函数直接返回图片标签字符串,比如在discuz模板里面调用这个函数 {eval img($pic,200,100)}
这样返回的地址就是/data/attachment/forum/aaaaaa_200_100.jpg 目前来说 这个图片是不存在 那么看第二步
第二步 需要添加apache的rewrite规则
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^data/attachment/(.*)$ images.php?url=$1 [L] </IfModule>
上面的意思,就是 data/attachement/这个地址开头不存在的文件都定向到image.php来处理,并且把url当参数传过去
第三步 就是image.php 这个里面的代码里
<?php $url = $_GET['url']; $src = './data/attachment/' . preg_replace('/_(\d+)_(\d+)/', '', $url); $filename = './data/attachment/' . $url; if (file_exists($filename)) { ob_start(); header('Content-type:image/jpeg'); readfile($filename); ob_flush(); flush(); } else { if(!preg_match('/_(\d+)_(\d+)/', $url, $wh)){ defulat(); exit(); } $width = $wh[1]; $height = $wh[2]; thumb(realpath($src), $width, $height, $filename, 'crop', '85'); } function thumb($src, $width, $height, $filename, $mode = 'scale', $quality = '100') { try { $imageValue = getimagesize($src); $sourceWidth = $imageValue[0]; //原图宽 $sourceHeight = $imageValue[1]; //原图高 $thumbWidth = $width; //缩略图宽 $thumbHeight = $height; //缩略图高 $_x = 0; $_y = 0; $w = $sourceWidth; $h = $sourceHeight; if ($mode == 'scale') { if ($sourceWidth <= $thumbWidth && $sourceHeight <= $thumbHeight) { $_x = floor(($thumbWidth - $sourceWidth) / 2); $_y = floor(($thumbHeight - $sourceHeight) / 2); $thumbWidth = $sourceWidth; $thumbHeight = $sourceHeight; } else { if ($thumbHeight * $sourceWidth > $thumbWidth * $sourceHeight) { $thumbHeight = floor($sourceHeight * $width / $sourceWidth); $_y = floor(($height - $thumbHeight) / 2); } else { $thumbWidth = floor($sourceWidth * $height / $sourceHeight); $_x = floor(($width - $thumbWidth) / 2); } } } else if ($mode == 'crop') { if ($sourceHeight < $thumbHeight) { //如果原图尺寸小于当前尺寸 $thumbWidth = floor($thumbWidth * $sourceHeight / $thumbHeight); $thumbHeight = $sourceHeight; } if ($sourceWidth < $thumbWidth) { $thumbHeight = floor($thumbHeight * $sourceWidth / $thumbWidth); $thumbWidth = $sourceWidth; } $s1 = $sourceWidth / $sourceHeight; //原图比例 $s2 = $width / $height; //新图比例 if ($s1 == $s2) { } else if ($s1 > $s2) { //全高度 $y = 0; $ax = floor($sourceWidth * ($thumbHeight / $sourceHeight)); $x = ($ax - $thumbWidth) / 2; $w = $thumbWidth / ($thumbHeight / $sourceHeight); } else { //全宽度 $x = 0; $ay = floor($sourceHeight * ($thumbWidth / $sourceWidth)); //模拟原图比例高度 $y = ($ay - $thumbHeight) / 2; $h = $thumbHeight / ($thumbWidth / $sourceWidth); } } switch ($imageValue[2]) { case 2: $source = imagecreatefromjpeg($src); break; case 1: $source = imagecreatefromgif($src); break; case 3: $source = imagecreatefrompng($src); break; case 6: $source = imagecreatefromwbmp($src); break; default: defulat(); return; } header("Content-type: image/jpeg"); $thumb = imagecreatetruecolor($width, $height); imagefill($thumb, 0, 0, imagecolorallocate($thumb, 255, 255, 255)); imagecopyresampled($thumb, $source, 0, 0, $x, $y, $width, $height, $w, $h); imagejpeg($thumb, null, $quality); // if ($_SERVER['HTTP_REFERER'] || false !== stripos($_SERVER['HTTP_REFERER'], 'http://' . $_SERVER['SERVER_NAME'])) { imagejpeg($thumb, $filename, $quality); // } imagedestroy($thumb); imagedestroy($source); } catch (Exception $ex) { defulat(); } } function defulat() { $default_img = realpath('media/images/nopic.jpg'); ob_start(); header('Content-type:image/jpeg'); readfile($default_img); ob_flush(); flush(); }
thumb 函数 可以控制 裁切方式,scale 为等比缩放,不裁切,不够的地方 用白色填充,crop 为裁切,如果要求的宽高比 大于原图宽高比,那么就保持最大显示宽度,居中裁切上下多余部分,如果要求宽高比小于原图宽高比,那么就保持最大高度,居中裁切左右多余部分,总而言之,在保持不变形的前提下 ,把图片缩小,而且最大保留图片的内容.哈哈 这个代码有多叼,试试知道了,,,当然你需要支持rewrite功能和GD2 支持
Das obige ist der detaillierte Inhalt vonSo zeigen Sie Bilder in verschiedenen Größen in PHP an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP ist ein Open-Source-MVC-Framework. Es erleichtert die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich. CakePHP verfügt über eine Reihe von Bibliotheken, um die Überlastung der häufigsten Aufgaben zu reduzieren.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet
