Der Code verwendet PHP, um ein Bild zu skalieren (derzeit nur JPEG). Mit dieser Methode hat das skalierte Bild eine deutlich bessere Qualität als eine skaliere Version im Browser. Die Dateigröße des neuen, verkleinerten Bildes ist ebenfalls kleiner (schneller herunterzuladen).
Der Code besteht aus zwei Teilen
- imageResizer() wird verwendet, um das Bild zu verarbeiten
- loadimage() fügt die Bild-URL in einem einfacheren Format ein
<?php
function imageResizer($url, $width, $height) {
header('Content-type: image/jpeg');
list($width_orig, $height_orig) = getimagesize($url);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
// This resamples the image
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($url);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// Output the image
imagejpeg($image_p, null, 100);
}
//works with both POST and GET
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'GET') {
imageResize($_GET['url'], $_GET['w'], $_GET['h']);
} elseif ($method == 'POST') {
imageResize($_POST['url'], $_POST['w'], $_POST['h']);
}
// makes the process simpler
function loadImage($url, $width, $height){
echo 'image.php?url=', urlencode($url) ,
'&w=',$width,
'&h=',$height;
}
?>
Verwendung
Der obige Code würde in einer Datei namens image.php stehen.
Bilder würden so angezeigt werden
<img src="<?php loadImage('image.jpg', 50, 50) ?>"
JAAAA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 Ich werde verrückt, meine Snippets sind drin, du weißt nicht, wie glücklich ich bin :)
Schau dir meine Seite an
Eines, Chris, du solltest zeigen, wer die Snippets gemacht hat
Was ist mit GIF und PNG?
Get/Post
$method = $_SERVER[‘REQUEST_METHOD’];
…
Sollte mit
imageResize($_REQUEST[‘url’], $_REQUEST[‘w’], $_REQUEST[‘h’]);
Hallo! Wie würde man den Link formatieren, sodass er das erforderliche alternative Tag für das Bild enthält?
Ich versuche, auf Bilder in bestimmten Verzeichnissen zu verlinken, aber es kodiert die URL, sodass Bilder schwarz zurückkommen.
Gibt es eine Möglichkeit, das Skript zu modifizieren, um die Kodierung der URL zu verhindern?
Tom,
Ich glaube (nicht sicher), dein Problem ist nicht das KODIEREN von Dingen.
Ich glaube, das Problem ist die URL-Aufrufung
Abhängig von der PHP-Installation müssen deine URLs auf das Verzeichnis /root/ basieren und nicht auf die Domain (http://www…..) bezogen sein, bedeutet
wenn du versuchst, ein Bild in einem Verzeichnis "innerhalb" derselben PHP-Installation zu verwenden (was bedeutet, dass sich das Bild auf demselben Server wie das Skalierungsskript befindet), musst du so etwas verwenden
/root/www/domain/htpdocs/images/deinbild.jpg stattdessen
http://www.doamin.com/images/deinbild.jpg
um deinen "echten" Pfad zu finden, verwende: PHP Supervariable
$_SERVER[“DOCUMENT_ROOT”]
$myPath = $_SERVER[“DOCUMENT_ROOT”];
$myImage = $mypath . “/images/myimagen.jpg”;
oder besser, schau dir diesen Trick an (der perfekt für uns in all unseren Skripten funktioniert)
if (!file_exists($urlImage)) $urlImage=str_ireplace(‘http://’.$_SERVER[“HTTP_HOST”],$_SERVER[“DOCUMENT_ROOT”],$urlImage);
Verstanden? Es ersetzt "http://www.domain.com" durch deinen "echten" Pfad, WENN es das Bild NICHT findet (also ein internes Bild)
Hoffe, das hilft dir.
Beachten Sie die hohen CPU-RESSOURCEN, die von Funktionen wie imagecreatetruecolor(), imagecreatefromjpeg(), imagecopyresampled() und anderen PHP-Bild-bezogenen Funktionen verbraucht werden.
Wir haben einen PHP-Skalierungsansatz auf einer Website mit hohem Traffic verwendet und mussten ihn entfernen, da die CPU-SERVERRESSOURCEN verrückt spielten und es ein paar Mal zu einem Absturz kam (ein Skalierungsprozess für jeden einzelnen Benutzer). Wir haben uns für einen anderen Ansatz entschieden (ähnlich wie WordPress) zum Zeitpunkt des Hochladens erstellen wir verschiedene Größen, die ausgeliefert werden sollen (WordPress macht das, wenn ein Bild in seinen Beiträgen verwendet wird).
Dies würde perfekt mit einem clientseitigen Dienst wie picturePolyfill funktionieren. Probieren Sie es aus!
Wie fügt man Unterstützung für PNG hinzu?
Dieser Skalierungscode ist sehr gut für Version 1.0.
Für Version 2.0 wäre es großartig, das Seitenverhältnis zu speichern, indem man Breite ODER Höhe angibt (streng nur eine davon).
Für Version 3.0: gecachte Bilder (mit eingeschränkten Größen);)
(Ich werde das für mich selbst machen)
Ich habe unten Code für alle Arten von grundlegenden Bildformaten angegeben.
function imageResizer($url, $width, $height) {