2010-07-15 9 views
11

Sto cercando di creare miniature con dimensione 100px per 100px. ho visto molti articoli che spiegano i metodi, ma la maggior parte finisce per avere la larghezza! = altezza se il rapporto dimensionale deve essere mantenuto.Immagine di ritaglio PHP per correggere larghezza e altezza senza perdere il rapporto di quota

ad esempio, ho un'immagine 450px per 350px. Mi piacerebbe ritagliare a 100px per 100px. se dovessi mantenere il rapporto, finirei con 100px per 77px. questo lo rende brutto quando im elencando queste immagini in una riga e colonna. tuttavia, anche l'immagine senza rapporto dimensionale sarà terribile.

ho visto le immagini da flickr e hanno un aspetto fantastico. ad esempio:
miniatura: http://farm1.static.flickr.com/23/32608803_29470dfeeb_s.jpg
dimensioni medie: http://farm1.static.flickr.com/23/32608803_29470dfeeb.jpg
ingrandita: http://farm1.static.flickr.com/23/32608803_29470dfeeb_b.jpg

tks

+0

ohh ora so perché qualcuno mi ha rimproverato per quel b4. devo cliccare sul segno di spunta !! omg io lo ho notato va bene fammi vedere le risposte – nuttynibbles

risposta

34

Questo viene fatto utilizzando solo una parte dell'immagine come miniatura che ha un 1: aspetto 1 rapporto (principalmente il centro dell'immagine). Se guardi da vicino puoi vederlo nella miniatura di flickr.

Perché hai "ritaglio" nella tua domanda, non sono sicuro se non lo sapessi già, ma cosa vuoi sapere allora?

Per utilizzare il ritaglio, ecco un esempio:

//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

Ciao skoschnike * ricontrolla se ho scritto correttamente il tuo nome =) * che mi passa per la testa. ma non ho capito come farlo. cura di condividere ?? – nuttynibbles

+0

hey sven, ho provato ur script e funziona benissimo. tk tu così tanto impeccabile – nuttynibbles

+0

hey sven, ho solo una domanda. l'uso di ur script funziona alla grande. ma ho capito che la qualità dell'immagine dopo il ritaglio non è la stessa dell'originale. ad esempio, ho scattato una foto campione da flickr e ritagliato alla stessa dimensione e hanno un aspetto diverso. qualsiasi soluzione per mantenere la qualità ?? – nuttynibbles

0

Mi piace usare GDlib a giocherellare con le immagini, è fantasticamente facile da lavorare anche. Ci sono un sacco di post sul blog e tutorial là fuori. Consiglierei di usare una classe per questo o simili, poiché occuparsi di tutte le variazioni nell'immagine può richiedere molto tempo.

+0

Hai forse provato? http://pear.php.net/package/Image_Transform –

3

Ritaglia immagine con il quadrato in base alla larghezza o altezza minore

public function croppThis($target_url) { 

    $this->jpegImgCrop($target_url); 

} 

$ target_url - è Nome dell'immagine.

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

Soluzione di lavoro facile; ma controlla prima il tipo di file e usa imagecreate da jpg, png o gif potrebbe essere un po 'più utile. – web2kx

+0

come lavorare questo .. plz help me .. come mostrare come immagine – user3501407

3

È possibile utilizzare questo codice. È necessario passare il percorso dell'immagine di origine e le dimensioni della miniatura in px e il percorso di destinazione opzionale. se lo passi, salverà l'immagine altrimenti verrà mostrato il pollice.

Sono consentiti solo jpg, jpeg e png.

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

dove sta creando thumb? qual è il percorso del pollice? scrivi anche qualche descrizione –

+1

@PathikVejani grazie, ho aggiunto qualche descrizione. –

Problemi correlati