Hola @fabyold,
yo para esto armé hace unos años esta función. La idea es usarla en lugar de move_uploaded_file()
pasándole además el tamaño en píxeles que querés que tenga.
No estoy seguro de que se pueda cambiar el tamaño de una imagen para que ocupe una cierta cantidad de MB, ya que el tamaǹo depende del tipo de imagen y a su vez del tipo de compresión que use. Por eso lo que se hace generalmente es poner un límite de alto y ancho en píxeles en vez de un límite por tamaño.
Otra cosa es que no aceptes archivos demasiado grandes como entrada, de forma tal de no matar la CPU haciendo las muchas reducciones...
A tus tipos de archivos válidos, agregales además el "ejpeg" que es como algunos IExplorer mandan los JPG.
<?php
/*
* @Prometeus Technology, a subsidiary of Pegasus Tech Supply
* @copyright Copyright (C) 2005-2015 Leonardo Tadei. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see gpl-3.0.txt
* MoveRedimImg is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
*/
//Esto es lo mismo que el archivo imredim.php pero para modificar el tamaño de un archivo y no para devolver un thumbail
//llamado como imgredim.php?org=xxx&max=xxx
function MoveRedimImg($nom_img_org, $nom_img_dest, $alto_max = 600, $ancho_max = 800){
if ( intval($alto_max) == 0 ) {
$alto_max = 500;
}
if ( intval($ancho_max) == 0 ) {
$ancho_max = 500;
}
// determina el tipo de archivo para hacer el Content-type
$size = getimagesize($nom_img_org);
// print_r($size);
// print($size['mime']); exit;
switch($size[2]){
case 1: $mime = "image/gif";
break;
case 2: $mime = "image/jpeg";
break;
case 3: $mime = "image/png";
break;
}
/*header("Content-type: $mime");*/
//header ("Content-type: image/jpeg");
$attrib_img_org = GetImageSize($nom_img_org);
$ancho_img_org = $attrib_img_org[0];
$alto_img_org = $attrib_img_org[1];
// Calcula el ancho y el alto del thumbnail desde un alto dado
if ($ancho_img_org > $ancho_max){
$ancho_img_des = $ancho_max;
$alto_img_des = round($ancho_max * $alto_img_org / $ancho_img_org);
} else {
$alto_img_des = $alto_img_org;
$ancho_img_des = $ancho_img_org;
}
if ($alto_img_des > $alto_max) {
$alto_img_des = $alto_max;
$ancho_img_des = round($alto_max * $ancho_img_org / $alto_img_org);
}
// Abre Imagen Original
switch ($mime) {
case "image/jpeg": $img_org = @ImageCreateFromJPEG($nom_img_org); /* Attempt to open */
break;
case "image/gif": $img_org = @ImageCreateFromGIF($nom_img_org); /* Attempt to open */
break;
case "image/png": $img_org = @ImageCreateFromPNG($nom_img_org); /* Attempt to open */
break;
}
// Crea la imágen Destino
$img_des = @imagecreatetruecolor ($ancho_img_des, $alto_img_des);
// int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
imagecopyresampled ($img_des, $img_org,
0, 0, 0, 0,
$ancho_img_des, $alto_img_des,
$ancho_img_org, $alto_img_org);
// Banner ;-)
//$text_color = ImageColorAllocate ($img_des, 128, 128, 255);
//ImageString ($img_des, 2, 5, 15, "E Sociales", $text_color);
switch ($mime) {
case "image/jpeg":
ImageJPEG ($img_des, $nom_img_dest);
break;
case "image/gif":
ImageGIF ($img_des, $nom_img_dest);
break;
case "image/png":
ImagePNG ($img_des, $nom_img_dest);
break;
}
// ImageJPEG ($img_des);
// Finalemente, borra el archivo origen
@unlink($nom_img_org);
return true;
}
?>
Saludos cordiales!