ridimensionare un'immagine

  • Creatore Discussione Creatore Discussione yok
  • Data di inizio Data di inizio

yok

Utente Attivo
3 Set 2009
62
0
0
Stresso ancora per uno script che dovrebbe, oltre a caricare un'immagine in una cartella("foto"), da un <input type="file">, dovrebbe dicevo creare anche una thumb della stessa immagine nella cartella"thumb".

La prima parte dello script viene eseguita correttamente, la seconda, quella di ridimensionamento, no.

Ecco il codice completo, la parte in rosso non funziona:

<?php

$file_temp=($_FILES['userfile']['tmp_name']);

$upload_dir = ($_SERVER["DOCUMENT_ROOT"] . "/foto");

$filename=$_FILES['userfile']['name'];

$pathToImage='foto/';

$pathToThumb='thumb/';

$thumbWidth=100;

$types = array("image/jpeg","image/pjpeg","image/png");

do {
if (is_uploaded_file($file_temp)) {

if ($_FILES['userfile']['size']>200000) {

echo "Il file non deve superare i 400Kb";
break;}

if(!@in_array($_FILES['userfile']['type'], $types)){

echo"formato file non consentito";
break;}

if (file_exists('foto/'.$_FILES['userfile']['name'])) {

echo "nome foto già esistente";
break;}

if (move_uploaded_file($_FILES['userfile']['tmp_name'], 'foto/'.$_FILES['userfile']['name'])) {

function createSingleThumb($filename, $pathToImage, $pathToThumb, $thumbWidth) {

if (!($img = imagecreatefromjpeg( "{$pathToImage}{$filename}" )))
$img = imagecreatefrompng( "{$pathToImage}{$filename}" );
$width = imagesx( $img );
$height = imagesy( $img );

$width2 = $thumbWidth;
$height2 = floor( $height * ( $thumbWidth / $width ) );

$tmpimg = imagecreatetruecolor( $new_width, $new_height );

imagecopyresized( $tmpimg, $img, 0, 0, 0, 0,$width2, $height2, $width, $height );

imagejpeg( $tmpimg, "$pathToThumb.$filename" );
}

echo "<p>caricamento effettuato</p>";
break;}

}
} while(false);

?>

Ciao, grazie!
 
grazie! Ci stò ancora lavorando sulle dritte che mi avete inviato. Una domanda: per attivare le librerie GD, in wamp, basta spuntare la voce php_gd2 da php "extensions"? Perchè non c'è verso che mi legga correttamente SmartImage
 
ciao
per attivare le librerie GD, in wamp, basta spuntare la voce php_gd2 da php "extensions"?
credo di si
comunque prima di lavorare tanto verifica che il tuo host abbia le librerie
es. su aruba:
windows: librerie inattive e non attivabili
linux: librerie attive
 
l'host accetta le librerie. Ho provato a riconfigurare il mio codice sulla base del link
"https://www.mrw.it/php/articoli/galleria-immagini-php-gd2-mysql_828_2.html"

ma, come il precedente, sembra filare tutto liscio, non mi dà errori e non mi salva una cippa come miniature. Bhò, è due settimane che configuro e riconfiguro codici per ste miniature ma non riesco a ricavarci nulla.....ma è veramente possibile ricavare delle miniature con php??
 
ciao
.....ma è veramente possibile ricavare delle miniature con php??
si, io lo faccio utilizzando il metodo dell'articolo, anzi non creo solo le tumb, ma ridimensiono anche l'originale alle misure che mi interessano
(ho fatto un maketumb_02)
 
Ho avuto anch'io dei problemi con le thumb...
questo è il codice che utilizzo se ti può essere utile:
la funzione
PHP:
function createThumbnail($img, $imgPath, $suffix, $newWidth, $newHeight, $quality)
{
  // Open the original image.
  $original = imagecreatefromjpeg("$imgPath/$img") or die("Error Opening original");
  list($width, $height, $type, $attr) = getimagesize("$imgPath/$img");

  // Resample the image.
  $tempImg = imagecreatetruecolor($newWidth, $newHeight) or die("Cant create temp image");
 // imagecopyresized($tempImg, $original, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height) or die("Cant resize copy");
imagecopyresampled ($tempImg, $original, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height)or die("Cant resize copy");
  // Create the new file name.
    $newName = 'vetrina/'.date('ymdhis').'.jpg';//vetrina è la directory dove vado a salvare la thumb
  // Save the image.
 imagejpeg($tempImg, $newName, 100)or die("Cant save image");
  // Clean up.
  imagedestroy($tempImg);
  return $newName;
}
la creazione della thumb
PHP:
$new = createThumbnail($path, "upload_img", "thumb", 90, 90, 100);
//path è il nome dell'immagine originale
//upload_img è la directory dove si trova l'immageine originale
come vedi in una sola riga di codice crei la thumb:p
 
niente ragazzi, grazie lo stesso.
Per me è mission impossible e non ho tempo per poterci stare ancora su, affido il lavoro a terze parti.
L'unica cosa che sono riuscito a fare è stato caricare le immagini dentro una cartella e basta. riuscire a ridurle a thumb non mi ha mai generato errori ma lo script non è mai stato davvero eseguito

alla prossima
Ciao!
 
ah, a proposito, ma non esiste qualche risorsa a pagamento, on-line, dove sia possibile inviare uno script non funzionante ed avere indietro il codice corretto e pronto all'uso?
 
ah, a proposito, ma non esiste qualche risorsa a pagamento, on-line, dove sia possibile inviare uno script non funzionante ed avere indietro il codice corretto e pronto all'uso?

Aspetta prima di pagare (per quello che vuoi basta chiedere un preventivo ad un qualsiasi sviluppatore professionista).
Hai provato ad eseguire lo script in locale?
 
Lo script postato da LaKanka, a meno di qualche piccola modifica, sembra funzionare perfettamente. Non capisco i problemi che accusi.
 
Lo script per ora gira solo in locale.
Chiaro che non sono un grande genio di php, quindi magari basterebbe ben poco per far girare lo script che a me non gira(sono altre le cose che girano...), però adattando i vari codici postati non riesco a stanare il ragno dal buco. E non credo sia molto costruttivo incollare tutte le prove che ho fatto, anche perchè ho perso il conto....

Alla prossima. Magari a furia di impazzire con sti codici riuscirò anch'io a dare un contributo al forum. Adesso come adesso non ci capisco (quasi) un ca...volo

Ciao!
 
mi posti la porzione di direttive del tuo php.ini relativamente alle GD?
 
Questa è la dichiarazione di una funzione che non viene richiamata da nessuna parte, per questo non gira mai...

PHP:
	function createSingleThumb($filename, $pathToImage, $pathToThumb, $thumbWidth) {
		if (!($img = imagecreatefromjpeg( "{$pathToImage}{$filename}" )))
			$img = imagecreatefrompng( "{$pathToImage}{$filename}" );
		$width = imagesx( $img );
		$height = imagesy( $img );

		$width2 = $thumbWidth;
		$height2 = floor( $height * ( $thumbWidth / $width ) );

		$tmpimg = imagecreatetruecolor( $new_width, $new_height );

		imagecopyresized( $tmpimg, $img, 0, 0, 0, 0,$width2, $height2, $width, $height );

		imagejpeg( $tmpimg, "$pathToThumb.$filename" );
	}
 
Ciao Eliox,
intendi questo?

[gd]
; Tell the jpeg decode to libjpeg warnings and try to create
; a gd image. The warning will then be displayed as notices
; disabled by default
;gd.jpeg_ignore_warning = 0

Io uso Wamp e ho abilitato l'estensione php_gd2 da php extensions.

Ora mi restituisce tutta questa sfilza di errori:


Warning: imagecreatefromjpeg(foto/74024.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\wamp\www\gallery\down.php on line 74

Warning: imagecreatefrompng(foto/74024.jpg) [function.imagecreatefrompng]: failed to open stream: No such file or directory in C:\wamp\www\gallery\down.php on line 75

Warning: imagesx(): supplied argument is not a valid Image resource in C:\wamp\www\gallery\down.php on line 76

Warning: imagesy(): supplied argument is not a valid Image resource in C:\wamp\www\gallery\down.php on line 77

Warning: Division by zero in C:\wamp\www\gallery\down.php on line 80

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\wamp\www\gallery\down.php on line 82

Warning: imagecopyresized(): supplied argument is not a valid Image resource in C:\wamp\www\gallery\down.php on line 84

Warning: imagejpeg(): supplied argument is not a valid Image resource in C:\wamp\www\gallery\down.php on line 86
 
Ultima modifica:
allora il problema può essere uno solo, sono sbagliati i percorsi alle immagini
 
Esatto Eliox!
Alla fine si era ridotto ad un problema di percorsi e di un paio di apici di troppo.
Avevo anche già trovato a chi dare in affidamento il codice per mettermelo a posto, così ho risparmiato qualche spicciolo.
Grazie di cuore
alla prossima
Ciao!

PS.
Se potesse tornare utile a qualcuno, prima o poi, ecco lo script completo: (le cartelle utilizzate si chiamano "foto" e "thumbs" con sottocartella "foto")



<?php

$file_temp=($_FILES['userfile']['tmp_name']);


$upload_dir = ($_SERVER["DOCUMENT_ROOT"] . "/foto");

$filename=$_FILES['userfile']['name'];

$pathToImage='foto/';

$pathToThumb='thumbs/';

$thumbWidth=100;

$types = array("image/jpeg","image/pjpeg","image/png");

do {
if (is_uploaded_file($file_temp)) {

if ($_FILES['userfile']['size']>400000) {

echo "Il file non deve superare i 400Kb";
break;}

if(!@in_array($_FILES['userfile']['type'], $types)){

echo"formato file non consentito";
break;}




if (file_exists('foto/'.$_FILES['userfile']['name'])) {

echo "nome foto già esistente";
break;}

$num_foto=count(glob('foto/*.*'));




if (!move_uploaded_file($_FILES['userfile']['tmp_name'], 'foto/'.$_FILES['userfile']['name'])) {
echo "<p><b>ATTENZIONE!</b><br />Errore nel caricamento dell'immagine!!<br /><br /> File <b>non</b></p>";
break;
}


$nome_nuovo="foto".$num_foto.".jpg";
$old="foto/".$_FILES['userfile']['name'];
$new="foto/".$nome_nuovo;
rename($old, $new);
}

} while(false);


function createSingleThumb($new, $pathToImage, $pathToThumb, $thumbWidth) {
if (!($img = imagecreatefromjpeg( "{$new}" )))
$img = imagecreatefrompng( "{$new}" );
$width = imagesx( $img );
$height = imagesy( $img );

$width2 = $thumbWidth;
$height2 = floor( $height * ( $thumbWidth / $width ) );

$tmpimg = imagecreatetruecolor( $width2, $height2 );

imagecopyresized( $tmpimg, $img, 0, 0, 0, 0,$width2, $height2, $width, $height );

imagejpeg( $tmpimg, $pathToThumb.$new );
}

createSingleThumb($new, $pathToImage, $pathToThumb, $thumbWidth);

?>
 
lieto di averti fatto risparmiare :) Il collega che ha perso il lavoro non sarà altretanto contento :rolleyes:
 

Discussioni simili