Unpic de ajutor in perfectionarea unui snippet


detective


Hi, am acest snippet care creeaza thumbnail-uri dupa imaginile uploadate dar nu e potrivit pt mine deoarece eu vrea sa creeze thumbnail-uri cu width si height fix, iar el creeaza in functie de height si nu reusesc sa il modific exact cum trebuie.Deci am nevoie ca thumb-urile sa fie de 80 pe 80, utilizand-ul asa cum e acum heightul e bun dar witdh-ul nu si imaginile sunt "distorsionate" din cauza formulei dupa care lucreaza el acum.

Snippet
CODE
if(isset($_POST['Submit'])){
     $size = 80; // dimensiunea thumbnail-ului

     $filedir = 'pics/'; // directorul imaginii pe care o vei uploada
     $thumbdir = 'pics/'; // directorul imaginii thumbnail
     $prefix = 'small_'; // prefixul adaugat imaginii

     $maxfile = '2000000';
     $mode = '0666';
      
     $userfile_name = $_FILES['image']['name'];
     $userfile_tmp = $_FILES['image']['tmp_name'];
     $userfile_size = $_FILES['image']['size'];
     $userfile_type = $_FILES['image']['type'];
      
     if (isset($_FILES['image']['name'])){
         $prod_img = $filedir.$userfile_name;
         $prod_img_thumb = $thumbdir.$prefix.$userfile_name;

         move_uploaded_file($userfile_tmp, $prod_img);
         chmod ($prod_img, octdec($mode));
          
         $sizes = getimagesize($prod_img);
         $aspect_ratio = $sizes[1]/$sizes[0];

         if ($sizes[1] <= $size)
         {
             $new_width = $sizes[0];
             $new_height = $sizes[1];
         }else{
             $new_height = $size;
             $new_width = abs($new_height/$aspect_ratio);
         }

         $destimg=ImageCreateTrueColor($new_width,$new_height) or die('Problem In Creating image');
         $srcimg=ImageCreateFromJPEG($prod_img) or die('Problem In opening Source Image');
         ImageCopyResized($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)) or die('Problem In resizing');
         ImageJPEG($destimg,$prod_img_thumb,90) or die('Problem In saving');
         imagedestroy($destimg);


Deci cine ma jauta sa il modific astfel incat sa creeze thumb-uri cu inaltime si latime prestabilita .

Multumesc anticipat
DarkAngelBv
CODE
$sizes = getimagesize($prod_img);
         $aspect_ratio = $sizes[1]/$sizes[0];

         if ($sizes[1] <= $size)
         {
             $new_width = $sizes[0];
             $new_height = $sizes[1];
         }else{
             $new_height = $size;
             $new_width = abs($new_height/$aspect_ratio);
         }

Bucata asta de cod o modifici... daca vrei width si heigth fix vei avea probleme cu pozele (cu proportia lor).
Daca vrei fix 80 px, in loc de bucata asta de cod pui:
CODE
$new_height = '80';
$new_width = '80';


TIP: Foloseste imageCopyResampled in loc de imageCopyResized pentru ca ai calitate mai buna.
 
detective
Mda, am incercat si nu iese cum trebuie, ce caut eu e sa faca thumbnail-uri de o inaltime si latime maxima fixa dar imaginea sa isi pastreze aspect-ul, exact ca thumb-urile din Windows, am incercat si de AICI cateva snippet-uri dar nu l-am gasit inca pe cel corect, stie cineva vreun snippet care functioneaza ?
detective
Am reusit cu unul dintre ele, creeaza ce vreau numai cu, 2 probleme minore , prima e ca nu creeeaza de 90 x 90 cat ii specific eu ci de 80 x 80 si nu inteleg de ce, si a-2 e ca nu reusesc sa il fac ca culoarea de umplutura, de pe langa imagine, sa fie transparenta, ea e negru by default, am incercat cu imagefill dar nu vrea.

Atasez snippet-ul aici
CODE
if(isset($_POST['Submit'])){
     $thumbsize = 90; // dimensiunea thumbnail-ului

     $filedir = 'pics/'; // directorul imaginii pe care o vei uploada
     $thumbdir = 'pics/'; // directorul imaginii thumbnail
     $prefix = 'small_'; // prefixul adaugat imaginii
     $width = 90;
        $height = 90;
     $maxfile = '2000000';
     $mode = '0666';
      
     $userfile_name = $_FILES['image']['name'];
     $userfile_tmp = $_FILES['image']['tmp_name'];
     $userfile_size = $_FILES['image']['size'];
     $userfile_type = $_FILES['image']['type'];
      
     if (isset($_FILES['image']['name'])){
         $prod_img = $filedir.$userfile_name;
         $prod_img_thumb = $thumbdir.$prefix.$userfile_name;

         move_uploaded_file($userfile_tmp, $prod_img);
         chmod ($prod_img, octdec($mode));
        
        
    
        
         // Get new dimensions
    list($width_orig, $height_orig) = getimagesize($prod_img);

    $ratio_orig = $width_orig/$height_orig;

    if ($width/$height > $ratio_orig) {
   $width = $height*$ratio_orig;
    } else {
   $height = $width/$ratio_orig;
    }
        
        
        

         $destimg=ImageCreateTrueColor($thumbsize, $thumbsize) or die('Problem In Creeare thumbnail');
         $srcimg=ImageCreateFromJPEG($prod_img) or die('Problem la deschiderea imaginii sursa');
         ImageCopyResampled($destimg,$srcimg,-($width/2) + ($thumbsize/2), -($height/2) + ($thumbsize/2), 0, 0, $width, $height, $width_orig, $height_orig) or die('Problem In resizing');
         ImageJPEG($destimg, null, 93) or die('Problema la salvare');
         Imagefill($destimg, 0, 0, 0xFFFFFF);

         imagedestroy($destimg);


Atasez si thumbnail-ul ca sa intelegi la ce ma refer cu "culoarea de umplutura" a spatiului ramas
Aceasta este o versiune simplificatã a paginii originale. Pentru a vizita versiunea originala click aici.