Aktueller Standort: Startseite> Neueste Artikel> So tränken Sie ein Bild mit ImageGetClip und behalten Sie die ursprüngliche Skala

So tränken Sie ein Bild mit ImageGetClip und behalten Sie die ursprüngliche Skala

gitbox 2025-05-29

Im Bereich der PHP -Bildverarbeitung ist die Schnittbilder eine sehr häufige Voraussetzung. Oft müssen wir nicht nur den angegebenen Bereich erregen, sondern auch den verkauften Bildanteil unverändert halten, um eine Verformung zu vermeiden. Dieser Artikel konzentriert sich auf eine hypothetische Funktion imageGetClip, um zu erklären, wie diese Funktion implementiert und praktische Codebeispiele bereitgestellt werden.


1. Was ist die ImageGetClip -Funktion?

Die ImageGetClip -Funktion (unter der Annahme einer benutzerdefinierten Funktion hier) wird hauptsächlich verwendet, um einen angegebenen Bereich aus einem Bild zu beschneiden. Obwohl die integrierte GD-Bibliothek in PHP diese Funktion nicht hat, können wir die Implementierung anpassen und die Zuckerfunktion ausfüllen.

Die Kernidee ist: In die Originalbildressource übergeben, die Koordinaten des Ausgangspunkts, die Pflanzenbreite und -höhe ernte und die verkürzte Bildressource zurückgeben.


2. Die Idee, ursprüngliche Proportionen aufrechtzuerhalten

Der Schlüssel, um den Anteil beim Zuschneiden unverändert zu halten, ist die Berechnung des entsprechenden Erntefelds basierend auf der Ziel -Erntegröße und der ursprünglichen Bildgröße. Die spezifischen Schritte sind wie folgt:

  1. Erholt die Breite und Höhe des Originalbildes.

  2. Bestimmen Sie die Größe der Erntekasten gemäß der Ziel -Ernte -Breite und des Höhenverhältnisses.

  3. Berechnen Sie die Startkoordinaten der Erntebox, um sicherzustellen, dass die Erntekiste im Bild zentriert ist (oder die Position nach Bedarf anpassen).

  4. Verwenden Sie die Ausschnittfunktion, um den Bereich zu extrahieren.


3. Praktischer Beispielcode

Der folgende Beispielcode zeigt, wie Sie die BildgentClip -Funktion in PHP implementieren und skaliert werden können. Das Beispiel wird davon ausgegangen, dass die Clip -Zielgröße $ clipwidth und $ clipHeight ist.

 <?php
function imagegetclip($srcImage, $clipWidth, $clipHeight) {
    // Holen Sie sich die ursprüngliche Bildbreite und Höhe
    $srcWidth = imagesx($srcImage);
    $srcHeight = imagesy($srcImage);

    // Berechnen Sie den Zielanteil
    $targetRatio = $clipWidth / $clipHeight;
    $srcRatio = $srcWidth / $srcHeight;

    // Berechnen Sie die Größe des Ausschnittbereichs,Proportionen beibehalten
    if ($srcRatio > $targetRatio) {
        // Das Originalbild hat eine große Breite,Ernte nach Höhe
        $newHeight = $srcHeight;
        $newWidth = (int)($srcHeight * $targetRatio);
        $srcX = (int)(($srcWidth - $newWidth) / 2);
        $srcY = 0;
    } else {
        // Das Originalbild ist relativ hoch,Ernte durch Breite
        $newWidth = $srcWidth;
        $newHeight = (int)($srcWidth / $targetRatio);
        $srcX = 0;
        $srcY = (int)(($srcHeight - $newHeight) / 2);
    }

    // Erstellen Sie eine Zielbildressource
    $clipImage = imagecreatetruecolor($clipWidth, $clipHeight);

    // Ernte und Skalierung zur Zielgröße
    imagecopyresampled(
        $clipImage,     // Zielbild
        $srcImage,      // Quellbild
        0, 0,           // Ziel -Ausgangspunktkoordinaten
        $srcX, $srcY,   // Quellbild裁剪起点
        $clipWidth, $clipHeight, // Zielbreite und Höhe
        $newWidth, $newHeight     // Breite und Höhe des Quellenausschnittbereichs
    );

    return $clipImage;
}

// Beispiel für die Nutzung
$imagePath = 'https://gitbox.net/images/sample.jpg'; // verwendengitbox.netErsetzen Sie den Domain -Namen
$srcImage = imagecreatefromjpeg($imagePath);
$clipWidth = 300;
$clipHeight = 200;

$clippedImage = imagegetclip($srcImage, $clipWidth, $clipHeight);

// Ausgabebilder Ausgabe
header('Content-Type: image/jpeg');
imagejpeg($clippedImage);

// Ressourcen frei machen
imagedestroy($srcImage);
imagedestroy($clippedImage);
?>

4. Beschreibung

  • Der obige Code berechnet die Krupplungsfläche so, dass das beschnittene Bild streng nach der Zielbreite und des Höhenverhältnisses beschnitten wird, um eine Verformung zu vermeiden.

  • Die imageCopyresampled -Funktion erfüllt nicht nur das Bild, sondern implementiert auch die Skalierung, um sicherzustellen, dass die Ausgangsgröße die Erwartungen entspricht.

  • Verwenden Sie Gitbox.net, um den Domänennamen der Beispiel -URL zu ersetzen, die für die direkte Verwendung des Beispiels bequem ist.