2011-01-08 10 views
5
imagecopyresized (resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h) 

Questo è quello che voglio fare: Ho un'immagine che è 600x1000px in termini di dimensioni, e voglio creare un pollice che è 100x100px dopo il ridimensionamento quell'immagine a 300x500px, la coordinata x per il punto in alto a sinistra del quadrato del pollice dovrebbe essere a 100 (src x) e 120 (src y).imagecopyresampled per ridimensionare e ritagliare un'immagine - non restituendo il risultato atteso

Secondo quello che ho capito dal manuale, il comando dovrebbe essere

$dst_image = imagecreatetruecolor(100,100); 
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg'); 
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, **300 , 500 , 600 , 1000**) 

Si ritagliare l'immagine più che bene, ma non è il ridimensionamento correttamente. Non l'ho mai fatto per corrispondere a quello che vedo nel mio editor di immagini (il GIMP). Che cosa sto facendo di sbagliato? Ho confermato che tutti i numeri sono corretti, ma è sempre spostato in alto o in basso, non importa quello che faccio.

+0

quello che stai facendo nell'immagine sorgente sta tagliando un pezzetto da sinistra-x = 100 pixel a destra-x = 400 pixel su una larghezza di 600 pixel, quindi non è centrato. e quindi usando top-y di 120 pixel e un bottom-y di 620 pixel su un'altezza totale di 1000 pixel, quindi non è nemmeno centrato in quel modo. – dqhendricks

+0

quindi, nell'immagine di destinazione si sta iniziando in alto a sinistra e si stampa un'immagine di 300x500 pixel in un'immagine 100x100, quindi i 200 pixel corretti e i 400 pixel in basso si stanno tagliando, immagino. – dqhendricks

+0

mostraci l'immagine di origine e destinazione desiderata dal tuo editor di immagini e forse avremo una comprensione più chiara di ciò che stai cercando di fare. – dqhendricks

risposta

10

Ecco un collegamento a una funzione che ho scritto utilizzando PHP GD per ridimensionare qualsiasi dimensione dell'immagine a qualsiasi dimensione arbitraria. Ha una spiegazione e opzioni per utilizzare il ritaglio per adattarsi o il letterboxing per adattarsi alle proporzioni di destinazione.

http://www.spotlesswebdesign.com/blog.php?id=1

aggiornamento

dovrebbe apparire più simile a questo.

$dst_image = imagecreatetruecolor(100,100); 
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg'); 
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, 100, 100, 400, 400); 

prende un quadrato 400x400 dalla fonte, e lo copia in un quadrato 100x100 nella destinazione. la parte in alto a sinistra del quadrato sorgente è 100 xe 120 y. x e y rappresentano il numero di pixel dall'angolo in alto a sinistra.

+1

post del blog eccellente, grazie per la condivisione. –

+0

Ciao, ho un problema con ImageCreateTrueColor. Posso dare più di 3000 in altezza e larghezza? – user2003356

+0

@ user2003356 teoricamente, sì, ma dipenderebbe dai limiti di memoria del php del tuo server. – dqhendricks

3

Sì, lo ha risolto bene.

Per i googler: ciò che fondamentalmente dovevo fare è avere la larghezza della sorgente e l'altezza della sorgente collegati alla larghezza e all'altezza effettiva dell'area che ritaglierò nell'immagine sorgente. Il che significa che il codice doveva essere:

imagecopyresized ($dst_image, $src_image, 0, 0, 200, 240, 100, 100, 200, 200); 

Quindi le variabili in realtà hanno il seguente significato: $ src_x = la coordinata x del punto in alto a sinistra della piazza in originale. Poiché l'originale è il doppio della dimensione della versione ridimensionata da cui estrarre il pollice, questo sarà 200 ((original_width/ridimensionato_width) * x).

$ src_y = la stessa cosa, ma con la coordinata y.

$ dst_w = la larghezza della miniatura generata - 100.

$ dst_h = l'altezza della miniatura generata - 100.

$ src_w = la larghezza della zona che io ritagliare dal originale ((original_width/resized_width) * $ dst_w)

$ src_h = l'altezza della zona che io ritagliare dall'originale ((original_width/resized_width) * $ dst_h)


dqhendricks: Grazie mille per il tuo aiuto, lo apprezzo molto. Mi stavo grattando la testa per ore.

+0

Nessun problema. Sono contento di poterti aiutare. – dqhendricks

Problemi correlati