Ver Mensaje Individual
  #11 (permalink)  
Antiguo 08/07/2009, 05:02
Avatar de Dragon_Mandarin
Dragon_Mandarin
 
Fecha de Ingreso: marzo-2005
Ubicación: Santiago de Chile
Mensajes: 231
Antigüedad: 19 años, 1 mes
Puntos: 14
Respuesta: problema redimencionador de imagenes

Hola,

si te interesa, te dejo este código para que lo modifiques y adaptes a tu gusto; en una de ésas te sirve. Bueno, ahí ves tú.

chau

----------------------

Código PHP:
 
<FORM action="redimensionar.php" encType="multipart/form-data" method="post" name="sendform">
  <h2>
    <INPUT name=MAX_FILE_SIZE type=hidden value=10000000>
    <INPUT maxLength=128 name=image type=file   ACCEPT="image/gif, image/jpeg, image/jpg">
    <br>
    <INPUT name=Submit type=submit value=Enviar>
    <INPUT name=Reset  type=reset value=Limpiar>
  </h2>
</FORM>
<h2>
  <?PHP
#############################################################################################
$IMG_ORG_HEIGHT "700"#Width of original image stored on server
$IMG_ORG_WIDTH  "700"#Height of original image stored on server
      #set to "*" to prevent resizing on the dimension
      #you will not lost X to Y ratio 
 
$IMG_HEIGHT 100;    # Accepted height of resized image
$IMG_WIDTH  100;    # Accepted width of resized image
      # read about "*" above
$IMG_ROOT "uploads/fotos";  # Relative path to folder where uploaded images will be stored; no ending slash! 
   # Like this: $IMG_ROOT = "./img"; 
   # Remeber to set proper attributes to that folder. 777 will work :)
$use_imagecreatetruecolor true// these flags enble ImageCreateTrueColor(); ImageCopyResampled();
$use_imagecopyresampled   true;// I cant test them coz my host doesn't allow these...
$JPG_QUALITY 90// output jpeg quality
#############################################################################################
//error_reporting(53); // dont need ur warnings!
if(!$HTTP_POST_FILES ["image"]["tmp_name"] || $HTTP_POST_FILES ["image"]["tmp_name"] =="none") die("<h5>Subir fotos permitidas, por favor.</h5><br>");
if( ! 
$f_org resizer_main("image","",$IMG_ORG_WIDTH,$IMG_ORG_HEIGHT))die("<br><font color=\"red\"><b>No Image received...</b></font><br>");
if( ! 
$f_res resizer_main("image","res_",$IMG_WIDTH,$IMG_HEIGHT))die("<br><font color=\"red\"><b>Not resized :( </b></font><br>");
 
$sz_org =getimagesize"$IMG_ROOT/$f_org" );
$sz_res =getimagesize"$IMG_ROOT/$f_res" );
$fs_orgfilesize("$IMG_ROOT/$f_org" );
$fs_resfilesize("$IMG_ROOT/$f_res" );
$html =<<< EHTML
<table width="80%" border="1" align="center">
  <tr> 
    <td colspan="2"><b>Imagen Original:</b></td>
  </tr>
  <tr> 
    <td colspan="2">
      <div align="center"><img src="$IMG_ROOT/$f_org" $sz_org
[3]></div>
    </td>
  </tr>
  <tr> 
    <td width="47%"> 
      <div align="right">Tamaño permitido: </div>
    </td>
    <td width="53%">$IMG_ORG_WIDTH x $IMG_ORG_HEIGHT</td>
  </tr>
  <tr> 
    <td width="47%"> 
      <div align="right">Tamaño Guardado: </div>
    </td>
    <td width="53%">$sz_org
[0] x $sz_org[1]</td>
  </tr>
  <tr> 
    <td width="47%"> 
      <div align="right">Tamaño del Archivo: </div>
    </td>
    <td width="53%">$fs_org</td>
  </tr>
  <tr> 
    <td width="47%"> 
      <div align="right">Calidad JPG: </div>
    </td>
    <td width="53%">$JPG_QUALITY</td>
  </tr>
  <tr> 
    <td colspan="2"><b>Imagen redimensionada:</b></td>
  </tr>
  <tr> 
    <td colspan="2">
      <div align="center"><img src="$IMG_ROOT/$f_res" $sz_res
[3]></div>
    </td>
  </tr>
  <tr> 
    <td width="47%"> 
      <div align="right">Tamaño permitido: </div>
    </td>
    <td width="53%">$IMG_WIDTH x $IMG_HEIGHT</td>
  </tr>
  <tr> 
    <td width="47%"> 
      <div align="right">Tamaño salvado: </div>
    </td>
    <td width="53%">$sz_res
[0] x $sz_res[1]</td>
  </tr>
  <tr> 
    <td width="47%"> 
      <div align="right">Tamaño del archivo: </div>
    </td>
    <td width="53%">$fs_res</td>
  </tr>
  <tr> 
    <td width="47%"> 
      <div align="right">Calidad imagen JPG: </div>
    </td>
    <td width="53%">$JPG_QUALITY</td>
  </tr>
</table>
EHTML;
echo 
$html;
 
 
#############################################################################################
function resizer_main($image$dest_file_prefix,$w$h){
//image_name = uploaded image. Name or your file field in your form.
//w,h - width and height to fit image in
global $use_imagecreatetruecolor$use_imagecopyresampled$IMG_ROOT$JPG_QUALITY$HTTP_POST_FILES;
$image_name $HTTP_POST_FILES [$image]["name"];
$image $HTTP_POST_FILES [$image]["tmp_name"];
if(
trim($image) == "" || trim($image) =="none") return false;
 
$arr_img image_from_upload($image);
 if( 
$arr_img["w"] != $w && $arr_img["h"] != $h){
  
$wh get_sizes($arr_img["w"], $arr_img["h"], $w$h);
  
$img_res img_get_resized(
   
$arr_img["img"], 
   
$arr_img["w"], $arr_img["h"], 
   
$wh["w"],  $wh["h"], 
   
$use_imagecreatetruecolor
   
$use_imagecopyresampled);
 } else {
   
//wow it is exactly like needed!!!
   
$img_res $arr_img["img"];
 }
 
$file_name make_filename($image_name$dest_file_prefix);
 
ImageJPEG($img_res,"$IMG_ROOT/$dest_file_prefix$file_name"$JPG_QUALITY);
 return 
"$dest_file_prefix$file_name";
}
function 
image_from_upload($uploaded_file){
 
$img_sz =  getimagesize$uploaded_file );  ## returns array with some properties like dimensions and type;
 ####### Now create original image from uploaded file. Be carefull! GIF is often not supported, as far as I remember from GD 1.6
 
switch( $img_sz[2] ){
  case 
1
   
$img_type "GIF";
   
$img ImageCreateFromGif($uploaded_file); 
  break;
  case 
2
   
$img ImageCreateFromJpeg($uploaded_file); 
   
$img_type "JPG";
  break;
  case 
3
   
$img ImageCreateFromPng($uploaded_file); 
   
$img_type "PNG";
  break;
  case 
4
   
$img ImageCreateFromSwf($uploaded_file); 
   
$img_type "SWF";
  break;
  default: die(
"<br><font color=\"red\"><b>Sorry, this image type is not supported yet.</b></font><br>");
 }
//case
 
return array("img"=>$img"w"=>$img_sz[0], "h"=>$img_sz[1], "type"=>$img_sz[2], "html"=>$img_sz[3]);
}
 
function 
get_sizes($src_w$src_h$dst_w,$dst_h ){
 
//src_w ,src_h-- start width and height
 //dst_w ,dst_h-- end width and height
 //return array  w=>new width h=>new height mlt => multiplier
 //the function tries to shrink or enalrge src_w,h in such a way to best fit them into dst_w,h
 //keeping x to y ratio unchanged
 //dst_w or/and dst_h can be "*" in this means that we dont care about that dimension
 //for example if dst_w="*" then we will try to resize by height not caring about width 
 //(but resizing width in such a way to keep the xy ratio)
 //if both = "*" we dont resize at all.
 #### Calculate multipliers
 
$mlt_w $dst_w $src_w;
 
$mlt_h $dst_h $src_h;
 
$mlt $mlt_w $mlt_h $mlt_w:$mlt_h;
 if(
$dst_w == "*"$mlt $mlt_h;
 if(
$dst_h == "*"$mlt $mlt_w;
 if(
$dst_w == "*" && $dst_h == "*"$mlt=1;
 
#### Calculate new dimensions
 
$img_new_w =  round($src_w $mlt);
 
$img_new_h =  round($src_h $mlt);
 return array(
"w" => $img_new_w"h" => $img_new_h"mlt_w"=>$mlt_w"mlt_h"=>$mlt_h,  "mlt"=>$mlt);
}
function 
img_get_resized($img_original,$img_w,$img_h,$img_new_w,$img_new_h,$use_imagecreatetruecolor=false$use_imagecopyresampled=false){
 
//$img_original, -- image to be resized
 //$img_w, -- its width
 //$img_h, -- its height
 //$img_new_w, -- resized width
 //$img_new_h -- height
 //$use_imagecreatetruecolor, $use_imagecopyresampled allow use of these function 
 //if they exist on the server
 
if( $use_imagecreatetruecolor && function_exists("imagecreatetruecolor")){
//  echo("Using ImageCreateTruecolor (better quality)<br>");
  
$img_resized imagecreatetruecolor($img_new_w,$img_new_h) or die("<br><font color=\"red\"><b>Failed to create destination image.</b></font><br>"); 
 } else {
//  echo("Using ImageCreate (usual quality)<br>");
  
$img_resized imagecreate($img_new_w,$img_new_h) or die("<br><font color=\"red\"><b>Failed to create destination image.</b></font><br>"); 
 }
 if(
$use_imagecopyresampled && function_exists("imagecopyresampled")){
//  echo("Using ImageCopyResampled (better quality)<br>");
  
imagecopyresampled($img_resized$img_original0000,$img_new_w$img_new_h$img_w,$img_h) or die("<br><font color=\"red\"><b>Failed to resize @ ImageCopyResampled()</b></font><br>"); 
 }else{
//  echo("Using ImageCopyResized (usual quality)<br>");
  
imagecopyresized($img_resized$img_original0000,$img_new_w$img_new_h$img_w,$img_h) or die("<br><font color=\"red\"><b>Failed to resize @ ImageCopyResized()</b></font><br>"); 
 }
 return 
$img_resized;
}
function 
make_filename($image_name){
 
## creates unique name, here I assume that it will never happen that in same second 
 ## two files with same name on user's site will be uploaded. However you can use your
 ## ways to generate unique name. Function unqueid() for example.
 
$file_name time()."_$image_name";    
 
#kick the original extension
 
$pos strrpos($file_name'.');
 
//personally I think jpeg rulez so I hardoce its extension here
 
$file_name substr($file_name0,$pos).".jpg";
 return 
$file_name;
}
?>

Última edición por Dragon_Mandarin; 08/07/2009 a las 05:07