2010-07-15 3 views
11

Ich suche Miniaturansichten mit einer Größe von 100 x 100 Pixel zu erstellen. Ich habe viele Artikel gesehen, die die Methoden erklären, aber die meisten haben die Breite! = Höhe, wenn das Dimensionsverhältnis beibehalten werden soll.PHP Bild zuschneiden, um Breite und Höhe zu fixieren, ohne das Dimensionsverhältnis zu verlieren

zum Beispiel habe ich eine 450px von 350px Bild. Ich möchte 100px um 100px zuschneiden. Wenn ich das Verhältnis halten würde, würde ich am Ende 100px bis 77px haben. Das macht es hässlich, wenn ich diese Bilder in einer Reihe und Spalte aufliste. Ein Bild ohne Dimensionsverhältnis wird jedoch ebenfalls schrecklich aussehen.

Ich habe Bilder von Flickr gesehen und sie sehen fantastisch aus. Zum Beispiel:
Miniatur: http://farm1.static.flickr.com/23/32608803_29470dfeeb_s.jpg
mittlere Größe: http://farm1.static.flickr.com/23/32608803_29470dfeeb.jpg
große Größe: http://farm1.static.flickr.com/23/32608803_29470dfeeb_b.jpg

TKS

+0

ohh jetzt weiß ich warum jemand schimpfte mich für das b4. Ich muss auf das Häkchen klicken !!. Ich merke es nicht. Okay, lassen Sie mich die Antworten sehen – nuttynibbles

Antwort

34

Dies wird durch nur mit einem Teil des Bildes als das Bild, das eine 1 getan hat, ist: 1 Seiten Verhältnis (meist die Mitte des Bildes). Wenn Sie genau hinsehen, können Sie es in der flickr-Miniatur sehen.

Da Sie in Ihrer Frage "crop" haben, bin ich mir nicht sicher, ob Sie das nicht schon wussten, aber was möchten Sie dann wissen?

Zuschneiden zu verwenden, hier ist ein Beispiel:

//Your Image 
$imgSrc = "image.jpg"; 

//getting the image dimensions 
list($width, $height) = getimagesize($imgSrc); 

//saving the image into memory (for manipulation with GD Library) 
$myImage = imagecreatefromjpeg($imgSrc); 

// calculating the part of the image to use for thumbnail 
if ($width > $height) { 
    $y = 0; 
    $x = ($width - $height)/2; 
    $smallestSide = $height; 
} else { 
    $x = 0; 
    $y = ($height - $width)/2; 
    $smallestSide = $width; 
} 

// copying the part into thumbnail 
$thumbSize = 100; 
$thumb = imagecreatetruecolor($thumbSize, $thumbSize); 
imagecopyresampled($thumb, $myImage, 0, 0, $x, $y, $thumbSize, $thumbSize, $smallestSide, $smallestSide); 

//final output 
header('Content-type: image/jpeg'); 
imagejpeg($thumb); 
+0

Hallo skoschnike * double check, wenn ich Ihren Namen richtig geschrieben =) * das hat mich durch den Kopf. aber ich weiß nicht, wie ich das machen soll. Sorge teilen? – nuttynibbles

+0

hey sven, ich habe versucht dein Skript und es funktioniert super. tk du so sehr. makellos – nuttynibbles

+0

hey sven, ich habe nur eine Frage. mit ur Skript funktioniert großartig. aber ich erkannte, dass die Qualität des Bildes nach dem Zuschneiden nicht dasselbe ist wie das Original. zum beispiel habe ich ein beispielbild von flickr genommen und auf die gleiche dimension geschnitten und sie sehen anders aus. irgendeine Lösung, um die Qualität zu behalten? – nuttynibbles

0

I GDLib mag mit mit Bildern fummeln, dann ist es fantastisch einfach auch zu arbeiten. Es gibt viele Blog-Posts und Tutorials. Ich würde empfehlen, eine Klasse für sie oder ähnliches zu verwenden, da die Pflege aller Variationen im Bild sehr zeitaufwendig sein kann.

+0

Haben Sie das vielleicht? http://pear.php.net/package/Image_Transform –

3

Crop Bild mit Platz basierend auf geringerer Breite oder Höhe

public function croppThis($target_url) { 

    $this->jpegImgCrop($target_url); 

} 

$ target_url - ist Name des Bildes.

public function jpegImgCrop($target_url) {//support 



    $image = imagecreatefromjpeg($target_url); 
    $filename = $target_url; 
    $width = imagesx($image); 
    $height = imagesy($image); 
    $image_type = imagetypes($image); //IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP | IMG_XPM 

    if($width==$height) { 

    $thumb_width = $width; 
    $thumb_height = $height; 

    } elseif($width<$height) { 

    $thumb_width = $width; 
    $thumb_height = $width; 

    } elseif($width>$height) { 

    $thumb_width = $height; 
    $thumb_height = $height; 

    } else { 
    $thumb_width = 150; 
    $thumb_height = 150; 
    } 

    $original_aspect = $width/$height; 
    $thumb_aspect = $thumb_width/$thumb_height; 

    if ($original_aspect >= $thumb_aspect) { 

    // If image is wider than thumbnail (in aspect ratio sense) 
    $new_height = $thumb_height; 
    $new_width = $width/($height/$thumb_height); 

    } 
    else { 
    // If the thumbnail is wider than the image 
    $new_width = $thumb_width; 
    $new_height = $height/($width/$thumb_width); 
    } 

    $thumb = imagecreatetruecolor($thumb_width, $thumb_height); 

    // Resize and crop 
    imagecopyresampled($thumb, 
     $image, 
     0 - ($new_width - $thumb_width)/2, // Center the image horizontally 
     0 - ($new_height - $thumb_height)/2, // Center the image vertically 
     0, 0, 
     $new_width, $new_height, 
     $width, $height); 
    imagejpeg($thumb, $filename, 80); 

} 
+0

Einfache Arbeitslösung; Überprüfen Sie jedoch zuerst den Dateityp und verwenden Sie imagecreatefrom jpg, png oder gif, um ein wenig hilfreicher zu sein. – web2kx

+0

wie man das funktioniert .. plz helfen mir .. wie man wie Bild zeigt – user3501407

3

Sie können diesen Code verwenden. Sie müssen Quellbildpfad und Miniaturbildgröße in px und optional im Zielpfad übergeben. Wenn Sie es übergeben, wird das Bild gespeichert, sonst wird der Daumen angezeigt.

Nur jpg, jpeg und png sind erlaubt.

function cropImage($sourcePath, $thumbSize, $destination = null) { 

    $parts = explode('.', $sourcePath); 
    $ext = $parts[count($parts) - 1]; 
    if ($ext == 'jpg' || $ext == 'jpeg') { 
    $format = 'jpg'; 
    } else { 
    $format = 'png'; 
    } 

    if ($format == 'jpg') { 
    $sourceImage = imagecreatefromjpeg($sourcePath); 
    } 
    if ($format == 'png') { 
    $sourceImage = imagecreatefrompng($sourcePath); 
    } 

    list($srcWidth, $srcHeight) = getimagesize($sourcePath); 

    // calculating the part of the image to use for thumbnail 
    if ($srcWidth > $srcHeight) { 
    $y = 0; 
    $x = ($srcWidth - $srcHeight)/2; 
    $smallestSide = $srcHeight; 
    } else { 
    $x = 0; 
    $y = ($srcHeight - $srcWidth)/2; 
    $smallestSide = $srcWidth; 
    } 

    $destinationImage = imagecreatetruecolor($thumbSize, $thumbSize); 
    imagecopyresampled($destinationImage, $sourceImage, 0, 0, $x, $y, $thumbSize, $thumbSize, $smallestSide, $smallestSide); 

    if ($destination == null) { 
    header('Content-Type: image/jpeg'); 
    if ($format == 'jpg') { 
     imagejpeg($destinationImage, null, 100); 
    } 
    if ($format == 'png') { 
     imagejpeg($destinationImage); 
    } 
    if ($destination = null) { 
    } 
    } else { 
    if ($format == 'jpg') { 
     imagejpeg($destinationImage, $destination, 100); 
    } 
    if ($format == 'png') { 
     imagepng($destinationImage, $destination); 
    } 
    } 
} 
+1

wo ist es Daumen erstellen? Was ist der Daumenpfad? schreibe auch eine Beschreibung. –

+1

@PathikVejani danke, ich habe eine Beschreibung hinzugefügt. –