Newsgroup: it.comp.www.php
Titolo: resizare un immagine al volo

non volevo creare il file, bensi fare un resize al volo
si puo fare ?

 si puo fare ?
Ma fa così schifo cercare con google?
http://www.sitepoint.com/article/image-resizing-php
-- 
Jax

si puo fare ?
Certamente. Lo script deve tirare fuori solo l'immagine e il suo header:
<?php
	...
	$gd1 = ImageCreateFromJPEG('original.jpg');
	$gd2 = ImageCreateTrueColor($newx, $newy);
	ImageCopyResampled($gd2, $gd1, 0, 0, 0, 0, $newx, $newy,
ImageSX($gd1), ImageSY($gd1)); // CONTROLLA, ho buttato giu' a memoria!
	ImageDestroy($gd1);
	Header('Content-Type: image/jpeg');
	ImageJPEG($gd2, '', $quality);
	ImageDestroy($gd2);
	// Se lo script finisce qui, gli ImageDestroy sono superflui
?>
Leonardo
-- 
 What do you make, so fair and bright;
 What do you build with sails for flight;
 What do you weave with wool so white?

Jax ha scritto:

quello scrive solo i tag height width in img src=
e te lo chiami resizzare, troppo facile ?

 e te lo chiami resizzare, troppo facile ?
Allora spiegami cosa intendi per "resize al volo". Io l'ho inteso 
così... se non crei un file, come puoi dire al browser di usare 
un'immagine che sul server non c'è?
Devi per forza scrivere su file, temporaneo o non temporaneo che sia...
Forse puoi farlo tramite ImageXXX, ma se non sbaglio non puoi 
incorporarlo in una pagina, puoi solo visualizzare l'immagine e basta.
Oh, io vado di logica, magari mi sbaglio, non sono certo un esperto di 
php... vediamo se qualcuno mi smentisce :)
-- 
Jax

 
Sbagli
<img src="immagine.php" />
dove immagine.php restituisce un content-type del tipo image/png o affine.
-- 
doh!

 incorporarlo in una pagina, puoi solo visualizzare l'immagine e basta.
Naturalmente non puoi incorporare tutto in una singola pagina, ma puoi 
fare 
<img src="thumb.php?image=uno.jpg&x=200&y=100">
e dentro thumb.php crei al volo la miniatura e la servi (dopo opportuni 
header() ) con imagejpeg()
E` brutto lo stesso non memorizzarla da qualche parte sul server (come 
richiede l'op) perche` appesantisce moltissimo con la conversione e, 
appena hai qualche decina di utenti contemporanei, ammazzi il server e 
perdi gli utenti che si stufano di aspettare un'immaginetta da 10 KiB
Bye.

 perdi gli utenti che si stufano di aspettare un'immaginetta da 10 KiB
Buono a sapersi, comunque... lieto di essere stato smentito :)
-- 
Jax

Forsa non c'entra nulla ma... con le GD mi pare si possa resizare e salvare 
su server giusto? 

 
sono immagini dentro ad un db (non sono immagini "d'autore")
il fatto e che mi prude (e non poco) memorizzarle sul server
quello che volevo fa:
immagine.php
immagine daldb
imagecreatefromstring
resizeimmagine (per far vedere che cavolo e')
non e' per un sito, ci gestisco altro con mysql :-)

Jax ha scritto:

altra cosa:
imagecopyresize
imagecopyresapled
sono ovviamente diverse:
il primo fa una distruzione di dati (sufficente per le enteprime)
il 2 fa una riscansione sul colore ecc... ed e' 100 volte piu lento
che imho si puo usare per dimesionare immagini gia decenti

 
be ringrazioando dell'aiuto  a tutti:
$sql0="SELECT UNCOMPRESS(ig_img) AS imgr FROM ".$table['rass']."img
WHERE IG='".$GET['ig']."' ;";
$result0 = $db->sql_query($sql0);
$row0 = $db->sql_fetchrow($result0);
$image = imagecreatefromstring($row0['imgr']);
$m3 = 150;
$oh = imagesy($image);  # original height
$ow = imagesx($image);  # original width
$new_h = $oh;
$new_w = $ow;
//if($oh > $m3 || $ow > $m3){
       $r = $oh/$ow;
       $new_h = ($oh > $ow) ? $m3 : $m3*$r;
       $new_w = $new_h/$r;
//}
// note TrueColor does 256 and not.. 8
$dst_img = ImageCreateTrueColor($new_w,$new_h);
ImageCopyResized($dst_img, $image, 0,0,0,0, $new_w, $new_h,
ImageSX($image),ImageSY($image));
Header('Content-Type: image/png');
imagePNG($dst_img);

WHERE IG='".$GET['ig']."' ;";
ig penso sia un intero, no? Disinfettalo con
	$ig = (int)$_GET['ig'];
e non ti servono gli apici, oppure se non e' un intero usa una regexp,
da' retta a un bischero.
E gia' che ci sei controlla se hai trovato qualcosa, e in caso che no,
manda fuori un'immagine di errore.
Leonardo been there, done that, got the T-shirt


 
- ho il gpc magic quote on (che due palle) (come sara' in php 6)
non disabilitabile
ho provato a dargli anche qualche sql iniection
se lo faccio in inserimento mi trovo il pezzo di query nel db
l'unica query "pericolosa" e' il delete se non metti un
non posso mettere troppi \' se no mi ritrovo con i dati slolzi
tipo: questo e\' un caldo estate
WHERE cosa='".."' limit 1 :-/
- una cosa che si potrebbe fare (ma in mysql5 nn serve piu)
e' mettere le query in una tabella ed eseguire all'occorenza
ovviamente non e' per internet ma per chi sa fare le query
e vuole interrogare il db a cazzo suo
- altra cosa se noti ho una classe di astrazione al db,
quindi faccio prima a mettere certe istruzioni
mysql_real_escape_string() direttamente in classe
se non gli arriva un int ma una stringa non da una mazza
poi se gli arriva sring "10" o int 10 non mi cambia la cosa
prova
if("10"==10){ echo "e' uguale"; }
if("10"===10){ echo "e' uguale "; }else{ echo " non identico" };
- ovviamente il globals deve essere OFF se no e' tutta fatica sprecata
cosa molto IMPORTANTE:
Grazie per il tuo interessamento, almeno qualcuno che si interessa di
sicurezza nello scrivere il codice si trova

 
centra, eccome per non salvarle non si mette il nome del file
tutto li
pappa cotta visto che esiste :
<?
function img_resize($m1,$m2,$m3,$m4){
//           $m1 ="atrix_9001_box.jpg"; # picture fileNAME here.
//           $m2 destinarion dir
//           $m3 $max=150;    # maximum size of 1 side of the picture.
//           $m4 extension   $outext="jpg";
//
   $path_parts = pathinfo($m1);
   $ext = strtolower($path_parts["extension"]);
$picture = basename($m1, $path_parts["extension"]);
  switch($ext){
        case "png":
             $image = ImageCreateFromPng($m1);
        break;
        case "jpg":
             $image = ImageCreateFromJpeg($m1);
        break;
        case "gif":
             $image = ImageCreateFromGif($m1);
        break;
        case "wbmp":
             $image = ImageCreateFromwBmp($m1);
        break;
        default:
          return FALSE;
        break;
  }
$oh = imagesy($image);  # original height
$ow = imagesx($image);  # original width
$new_h = $oh;
$new_w = $ow;
//if($oh > $m3 || $ow > $m3){
       $r = $oh/$ow;
       $new_h = ($oh > $ow) ? $m3 : $m3*$r;
       $new_w = $new_h/$r;
//}
// note TrueColor does 256 and not.. 8
$dst_img = ImageCreateTrueColor($new_w,$new_h);
ImageCopyResized($dst_img, $image, 0,0,0,0, $new_w, $new_h,
ImageSX($image),ImageSY($image));
$outext = strtolower($m4);
switch($outext){
       case "png":
              imagepng($dst_img, $m2.$picture."png");
       break;
       case "jpg":
             imagejpeg($dst_img, $m2.$picture."jpg");
       break;
       case "wbmp":
             imagewbmp($dst_img, $m2.$picture."wbmp");
       break;
       case "gif":
              imagegif($dst_img, $m2.$picture."gif");
       break;
}
if(file_exists($m2.$picture.$outext)){
              $fileww = $picture.$outext;
              return $fileww;
   }else{
              return FALSE;
   }
}// end fun
?>

sicurezza nello scrivere il codice si trova
De nada :-D
Leonardo
