1024 && $peso<1048576){ return round($peso/1024,1 ). " KB"; }else if($peso>1048576 && $peso<1073741824){ return round($peso/1048576,2 ). " MB"; }else{ return round($peso/1073741824,2 ). " GB"; } } // FIN funciones************************************* $maxancho=100; // ancho max del thumbnail $maxalto=100; // alto max del thumbnail if (isset($_FILES["archivo"])){ // si viene algo del form $file = $_FILES["archivo"]; //cargo en $file la info $nombre = $file["name"]; //nombre original subido $ruta_provisional = $file["tmp_name"]; //ruta temporaria en server $ruta = "img-dropzone/"; // ruta final $extension = extension($nombre); // extensión del archivo $raiznombre = raiz($nombre); // raiz del nombre del archivo $im = new Imagick(); //creo el objeto imagick $im->readImage($ruta_provisional); // grabo la imagen desde el temporal if ($extension =='HEIC' || $extension=='heic'){ // si es heic $im->setImageFormat('jpeg'); // le cambio el formato a jpg $nombre = $raiznombre . '.jpg'; // le cambio la extensión en el nombre } if(file_exists($ruta. $nombre)){ //si ya hay imagen con ese nombre se lo cambio $nombre = nombrecopia($nombre); } $ruta_final= $ruta. $nombre; $im->writeImage($ruta_final); // grabo en el disco la imagen grande // proceso para el thumbnail $ancho = $im->getImageWidth(); //obtengo ancho de la grande $alto = $im->getImageHeight(); //obtengo alto de la grande $x_prop = $maxancho / $ancho; //proporción de reduccion ancho $y_prop = $maxalto / $alto; //proporción de reduccion alto if (($x_prop * $alto) < $maxalto){ //si reduzco altura y quedo chico $ancho_final = ceil($y_prop * $ancho); //entonces reduzco ancho $alto_final = $maxalto; // y dejo el alto (menor al max) }else{ $alto_final = ceil($x_prop * $alto); // si no reduzco alto $ancho_final = $maxancho; // y dejo ancho (menor al max) } $im->thumbnailImage($ancho_final,$alto_final); // creo el thumbnail //************* si está rotada (jpg) la original corrijo la orientación del thumbnail.************************** $ext=extension($nombre); if($ext=='jpg'|| $ext=='JPG' || $ext=='jpeg' || $ext=='JPEG'){ $exif = exif_read_data($ruta_final); //leo los datos exif de la grande grabada if (array_key_exists('Orientation', $exif)) { // si existe la clave orientación $orientacion = $exif['Orientation']; // leo la orientación if (!empty($orientacion)) { //si hay datos de orientación roto el thumbnail $fondo = new ImagickPixel('#00000000'); // color de fondo para las rotaciones no enteras pi/2 switch ($orientacion) { case 3: $im->rotateImage($fondo, 180); break; case 6: $im->rotateImage($fondo, 90); break; case 8: $im->rotateImage($fondo, 270); break; } } //fin not empty $orientacion } //fin array_key_exists } // fin if jpg $rutathumb = $ruta.'_'. $nombre; $im->writeImage($rutathumb); // grabo en el disco el thumbnail con _nombre $im->clear(); // destruyo objeto y libero memoria $peso = peso(filesize($ruta_final)); //tamaño en Bytes peso(paso a string con B, KB, MB, GB) $pesothumb = peso(filesize($rutathumb)); //tamaño en Bytes del thumb $fecha = date("d/m/Y", filectime($ruta_final)); // fecha de última modificación de inode (o sea upload en este caso) $resultado=array("devolucion"=>$nombre,"ruta"=>$ruta_final,"ancho"=>$ancho,"alto"=>$alto,"peso"=>$peso,"anchominiatura"=>$ancho_final,"altominiatura"=>$alto_final,"fecha"=>$fecha,"tipo"=>$ext,"rutaminiatura"=>$rutathumb,"pesominiatura"=>$pesothumb); echo(json_encode($resultado)); }// fin if (is set) si viene algo del form ?>