Crop di immagini da una cartella

mm88

Nuovo Utente
30 Ott 2008
14
0
0
Ciao a tutti, vorrei che il mio script leggesse tutte le immagini presenti in una cartella e che le visualizzasse dopo averle ritagliate.

sto utilizzando questo script:

Codice:
$nw=50; //The Width Of The Thumbnails
$nh=50; //The Height Of The Thumbnails

$ipath = "pics/"; //Path To Place Where Images Are Uploaded. No Trailing Slash
$tpath = "pics/thumbnails";//Path To Place Where Thumbnails Are Uploaded. No Trailing Slash

$img_name = $ipath."img1.jpg";

$dimensions = GetImageSize($img);

//$thname = "$tpath/$img_name";
$thname = "$img_name";

$w=$dimensions[0];
$h=$dimensions[1];

$img2 = ImageCreateFromJpeg($img);
$thumb=ImageCreateTrueColor($nw,$nh);
	
$wm = $w/$nw;
$hm = $h/$nh;
	
$h_height = $nh/2;
$w_height = $nw/2;
	
if($w > $h){
	
	$adjusted_width = $w / $hm;
	$half_width = $adjusted_width / 2;
	$int_width = $half_width - $w_height;
	
	ImageCopyResampled($thumb,$img2,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h); 
	ImageJPEG($thumb,$thname,95); 
	
}elseif(($w < $h) || ($w == $h)){
	
	$adjusted_height = $h / $wm;
	$half_height = $adjusted_height / 2;
	$int_height = $half_height - $h_height;
	
	touch($thname);
	ImageCopyResampled($thumb,$img2,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h); 
	ImageJPEG($thumb,$thname,95); 
	
}else{
	ImageCopyResampled($thumb,$img2,0,0,0,0,$nw,$nh,$w,$h); 	
	ImageJPEG($thumb,$thname,95); 
}

imagedestroy($img2);
?>


tuttavia utilizzando un:

echo "<img src=\"$thumb\">";

Non ottengo l'output dell'immagine. La cartella "thumbnails" sul server è vuota e, verificando la variabile $thumb, mi restituisce un "Resource id #6".


Come faccio a visualizzare l'immagine croppata?

grazie
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
È perché non puoi utilizzare la variabile specificata come vorresti, perché $thumb contiene la risorsa creata dalle GD, come un riferimento all'immagine. Per visualizzarla devi usare imagejpeg, e per creare un link devi inserirlo necessariamente "a mano" o comunque con un ciclo while.
 

mm88

Nuovo Utente
30 Ott 2008
14
0
0
È perché non puoi utilizzare la variabile specificata come vorresti, perché $thumb contiene la risorsa creata dalle GD, come un riferimento all'immagine. Per visualizzarla devi usare imagejpeg, e per creare un link devi inserirlo necessariamente "a mano" o comunque con un ciclo while.


Ti ringrazio per la risposta.

Mi potresti gentilmente indicare come modificare lo script ?


grazie
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
ti basta associare:
PHP:
ImageJPEG($thumb,$thname,95);
ad una variabile e utilizzare questa come valore da stampare
 

mm88

Nuovo Utente
30 Ott 2008
14
0
0
No, veramente dovresti prima impostare gli header necessari e poi visualizzare l'immagine senza il tag img, perché la funzione ti restituisce il contenuto dell'immagine.

Ho cercato in rete un riferimento a quanto mi dici, ma sono confuso. Non sono un utilizzatore di PHP al tuo livello.

In pratica, l'header è già stato inviato ad apertura di pagina, giusto? Devo azzerarlo e modificarlo?

Come faccio?

Se non hai tempo per scrivere il codice, linkami un tutorial.

grazie
 
Ultima modifica:

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org

mm88

Nuovo Utente
30 Ott 2008
14
0
0
Per header viene inteso tutto quello che viene inviato al server riguardante il tipo di contenuto della pagina, la gestione della cache, etc.


Dunque, ho letto il tutorial e alla fine del mio codice ho aggiunto:

Codice:
header("Content-type: image/jpeg"); 
imagejpeg($img); *

Tuttavia l'output mi dà:

Cannot modify header information - headers already sent by (output started at /web/htdocs/....

e

Warning: imagejpeg(): supplied argument is not a valid Image resource in /web/htdocs/...


Per quale motivo?

Come faccio allora a modificare l'header?

grazie
 

mm88

Nuovo Utente
30 Ott 2008
14
0
0
Ma la variabile $img cosa contiene?

Gentilmente, un passo alla volta.

Sto utilizzando sempre il codice che leggi nel mio primo post.

Mi hai gentilmente detto di modificare gli header, ho inserito header("Content-type: image/jpeg"); prima di distruggere l'immagine, e mi dà quell'errore.

Per quale motivo?

Sono sicuro che se provassi il codice, capiresti subito il problema.

Io avevo semplicemente bisogno di uno script che leggesse tutte le immagini presenti in una cartella e me restituisse tagliate (in base ad una dimensione definita).

Ho cercato in giro, ma ho trovato solo script che creano thumbnail non croppate. Oppure azioni di crop su immagini singole.


grazie
 

mm88

Nuovo Utente
30 Ott 2008
14
0
0
Ma da quanto leggo dallo script che c'è nel primo post la variabile $img non è definita, forse hai sbagliato il nome.

Come ho già scritto, non so come richiamare l'immagine.

$img sarà la variabile sbagliata da richiamare, ma l'errore sull header me lo dà lo stesso.
 

mm88

Nuovo Utente
30 Ott 2008
14
0
0
Te lo da perché le librerie GD visualizzano l'errore e quindi inviano un header visualizzando quel testo. Se non comparisse l'errore non ci sarebbe neanche quello dell'header ;)


Ok. L'utente Eliox consigliava di associare ImageJPEG($thumb,$thname,95); ad una variabile e utilizzare questa come valore da stampare.

provando con:

Codice:
$img = ImageJPEG($thumb,$thname,95); *
echo "<img src=\"$img\">";

mi restituisce un syntax error, unexpected T_ECHO


Come posso fare?


grazie
 
Ultima modifica:

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Però imparate ad interpretare gli errori di PHP. Dopotutto se hanno messo un interprete che ti dice dove hai sbagliato un motivo ci sarà, no? E ti assicuro che dei report sugli errori dettagliati come quelli di PHP non li troverai in nessun altro linguaggio!

Comunque, tornando al tuo problema: che cosa ci fa quell'asterisco lì? Toglilo.
 

mm88

Nuovo Utente
30 Ott 2008
14
0
0
Però imparate ad interpretare gli errori di PHP. Dopotutto se hanno messo un interprete che ti dice dove hai sbagliato un motivo ci sarà, no? E ti assicuro che dei report sugli errori dettagliati come quelli di PHP non li troverai in nessun altro linguaggio!

Comunque, tornando al tuo problema: che cosa ci fa quell'asterisco lì? Toglilo.


Ho evidentemente copiato male, perché - a quello ci arrivo - quell'asterisco non ci va.

In ogni caso, sei gentilissimo, ma non capisco perché tu risponda solo ad una parte della domanda

Ho seguito le tue indicazioni, ma L'immagine non viene visualizzata utilizzando

Codice:
header("Content-type: image/jpeg");

$img = ImageJPEG($thumb,$thname,95);

echo "<img src=\"$img\">";


mi ridà Warning: Cannot modify header information - headers already sent by (output started at


Puoi gentilmente riportare il codice corretto per visualizzare l'immagine?

grazie
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Ti ho già spiegato che non puoi inviare una stringa dopo aver impostato gli header per visualizzare un'immagine, ti pare? Devi fare così:
PHP:
imagejpeg($thumb, $thname, 95);
echo "<img src=\"{$thname}\" />";
Con questo codice visualizzi l'anteprima a qualità 95% e la salvi in un file che avrà il nome contenuto nella variabile $thname.
 
Ultima modifica:

mm88

Nuovo Utente
30 Ott 2008
14
0
0
Ti ho già spiegato che non puoi inviare una stringa dopo aver impostato gli header per visualizzare un'immagine, ti pare? Devi fare così:
PHP:
imagejpeg($thumb, $thname, 95);
echo "<img src=\"{$thname}\" />";
Con questo codice visualizzi l'anteprima a qualità 95% e la salvi in un file che avrà il nome contenuto nella variabile $thname.


Ti ho già spiegato che non puoi inviare una stringa dopo aver impostato gli header per visualizzare un'immagine, ti pare? Devi fare così:
PHP:
imagejpeg($thumb, $thname, 95);
echo "<img src=\"{$thname}\" />";
Con questo codice visualizzi l'anteprima a qualità 95% e la salvi in un file che avrà il nome contenuto nella variabile $thname.



Ecco, per esempio non conosco l'utilizzo di quelle parentesi graffe dentro cui c'è la variabile. Per questo ti chiedevo di farmi un esempio pratico.



Il mio script attualmente è questo:


Codice:
<?
$nw=50; //The Width Of The Thumbnails
$nh=50; //The Height Of The Thumbnails

$ipath = "pics/"; //Path To Place Where Images Are Uploaded. No Trailing Slash
$tpath = "pics/thumbnails";//Path To Place Where Thumbnails Are Uploaded. No Trailing Slash

$img_name = $ipath."img1.jpg";

$dimensions = GetImageSize($img);

//$thname = "$tpath/$img_name";
$thname = "$img_name";

$w=$dimensions[0];
$h=$dimensions[1];

$img2 = ImageCreateFromJpeg($img);
$thumb=ImageCreateTrueColor($nw,$nh);
	
$wm = $w/$nw;
$hm = $h/$nh;
	
$h_height = $nh/2;
$w_height = $nw/2;
	
if($w > $h){
	
	$adjusted_width = $w / $hm;
	$half_width = $adjusted_width / 2;
	$int_width = $half_width - $w_height;
	
	ImageCopyResampled($thumb,$img2,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h); 
	ImageJPEG($thumb,$thname,95); 
        echo "<img src=\"{$thname}\">";
	
}elseif(($w < $h) || ($w == $h)){
	
	$adjusted_height = $h / $wm;
	$half_height = $adjusted_height / 2;
	$int_height = $half_height - $h_height;
	
	touch($thname);
	ImageCopyResampled($thumb,$img2,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h); 
	ImageJPEG($thumb,$thname,95); 
        echo "<img src=\"{$thname}\">";
	
}else{
	ImageCopyResampled($thumb,$img2,0,0,0,0,$nw,$nh,$w,$h); 	
	ImageJPEG($thumb,$thname,95); 
        echo "<img src=\"{$thname}\">";
}

imagedestroy($img2);
?>


Ho inserito quindi l'echo che mi hai suggerito nei vari casi dell'IF.
Purtroppo però mi restituisce un banale errore di sintassi "syntax error, unexpected "}" in..." alla linea in cui ho aggiunto gli echo.

Come mai?


grazie
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Le parentesi graffe all'interno di una stringa servono per processare variabili senza il rischio che il loro nome si mescoli con il resto della stringa da visualizzare. Personalmente le uso sempre per evitare macelli dal principio. Mi sembra strano che ti restituisca un errore, in ogni caso ho fatto qualche correzione al tuo script. Ecco qualche consiglio:
  1. Non usare mai i tag di apertura corti, alcuni server non li riconoscono.
  2. I nomi delle funzioni in PHP sono sempre minuscoli, non scriverle come meglio credi.
  3. Quando assegni ad una variabile il valore di un'altra variabile, o quando devi visualizzare solo una variabile non servono le virgolette.
  4. Non usare le parentesi negli if per espressioni che starebbero bene anche senza.
  5. Distanzia sempre, per leggibilità, i parametri che passi ad una funzione dando uno spazio dopo le virgole.
Ecco il tuo script corretto, ma non sono sicuro che così sia risolto il problema delle parentesi:
PHP:
<?php
$nw = 50; // larghezza delle anteprime
$nh = 50; // altezza delle anteprime

$ipath = 'pics'; // directory in cui inserire le immagini senza slash finale.
$tpath = 'pics/thumbnails'; // directory in cui inserire le anteprime senza slash finale.

$img_name = "{$ipath}img1.jpg";
$dimensions = getimagesize($img);

$thname = $img_name;

list($w, $h) = $dimensions;

$img2 = imagecreatefromjpeg($img);
$thumb = imagecreatetruecolor($nw,$nh);
	
$wm = $w / $nw;
$hm = $h / $nh;
	
$h_height = $nh / 2;
$w_height = $nw / 2;
	
if($w > $h)
{
	$adjusted_width = $w / $hm;
	$half_width = $adjusted_width / 2;
	$int_width = $half_width - $w_height;
	
	imagecopyresampled($thumb, $img2, -$int_width, 0, 0, 0, $adjusted_width, $nh, $w, $h); 
	imagejpeg($thumb, $thname, 95); 
	echo "<img src=\"{$thname}\" />";
}
elseif(($w < $h) || ($w == $h))
{
	$adjusted_height = $h / $wm;
	$half_height = $adjusted_height / 2;
	$int_height = $half_height - $h_height;
	
	touch($thname);
	imagecopyresampled($thumb, $img2, 0, -$int_height, 0, 0, $nw, $adjusted_height, $w, $h); 
	imagejpeg($thumb, $thname, 95); 
	echo "<img src=\"{$thname}\" />";
}
else
{
	imagecopyresampled($thumb, $img2, 0, 0, 0, 0, $nw, $nh, $w, $h); 	
	imagejpeg($thumb, $thname, 95); 
	echo "<img src=\"{$thname}\" />";
}

imagedestroy($img2);
?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
F upload + resize + crop jQuery 1
M Crop immagine con i CSS HTML e CSS 3
S [VB.NET]: Coordinate immagini dentro una PictureBox Visual Basic 0
G Perché il mio sito su Google news fa vedere le immagini degli articoli la mia foto profilo? WordPress 1
M Immagini non usate WordPress 0
elmonarca77 Utilizzo e licenze immagini Webdesign e Grafica 4
S Risoluzione Immagini e Connessione Joomla 0
G Il mio sito dopo aver abilitato l'ssl non visualizza le immagini con indirizzi senza ssl HTML e CSS 0
A WordPress e immagini Hosting 0
Y RITAGLIO IMMAGINI Javascript 0
R Immagini html HTML e CSS 2
E Come gestire al meglio le immagini legno grande formato Photoshop 0
M Random Immagini + Testi PHP 13
L form immagini per il database PHP 0
Ricky80 Coordinazione immagini HTML e CSS 4
P Percorsi e immagini. PHP 0
N Indicizzazione immagini su Google Google Search Console 0
L Import Immagini piattaforma IONIC Sviluppo app per Android 0
L Import massivo di immagini in tabelle piattaforma IONIC Presentati al Forum 1
P Script upload immagini jQuery 0
E Salvare immagini PHP 0
S problema salvataggio immagini Photoshop 0
R Immagini scontornate: che formato? HTML e CSS 4
A Sovrapposizione Immagini Photoshop 0
Cosina Mostrare immagini da una cartella, ma solo un numero definito PHP 12
Tommy03 Gestire dimensioni immagini PHP 4
M Aiuto con inserimento immagini WordPress 6
L Scmporre una foto dotata di varie immagini in piu layer Photoshop 2
M Impossibile visionare la immagini dall'App. IP Cam e Videosorveglianza 8
A Array di immagini Sviluppo app per Android 10
L Come spostare cartella immagini/video PHP 1
A Cornici immagini per sito Web Wordpress WordPress 1
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
R uploader di immagini e text PHP 0
S Importazione immagini PHP 3
beatle [Photoshop] problema inserimento immagini Photoshop 1
L [PHP] Invio Immagini PHP 1
I [PHP] generazione url "uguale" che punta a due immagini diverse PHP 0
W Immagini professionali a costi sostenibili Discussioni Varie 1
bluebirdoncanvas [Photoshop] problema dimensioni immagini o zoom Photoshop 0
andreas88 Immagini non leggibili dopo trasferimento alla scheda SD Smartphone e tablet 0
zorro Aggiunta di immagini al sito Leggi, Normative e Fisco 0
M [PHP] Selezionare immagini directory non presenti in db PHP 11
romeocharly [PHP] Script per rinominare in automatico le immagini inviate da ftp PHP 0
I [PHP] Immagini caricate su server diverse da quelle mostrate PHP 19
kiai969 Stesse immagini su WordPress SEO e Posizionamento 2
L [HTML] Problemino con le immagini di sfondo HTML e CSS 4
A [Photoshop] Ritagliare cerchi tutti uguali da diverse immagini Photoshop 2
F [PHP] Galleria immagini PHP 6
trattorino [PHP] problema entrata immagini insert PHP 1

Discussioni simili