Si, pero es un tanto extenso:
Código PHP:
Ver original
// procesa las fotos de albums, pero tambien la foto de perfil, si es cambiada
function procesar_foto($album_id = null, $es_album) {
if($es_album)
$carpeta = ALBUMS;
else
$carpeta = PERFILES;
$respuesta['error'] = "Error de escritura en la carpeta '".$carpeta."'<br/>";
// Tamaño minimo para las imagenes
if($medidas_px[0] < ANCHO_FOTO)
{
if(!$es_album) return null; // no se cambiara la foto de perfil
$respuesta['error'] = "<b>La foto debe medir al menos 220px de ancho</b><br/>No se guardo: ".$_FILES['foto']['name']."<br/><br/>";
return $respuesta;
}
return false;
// nombre y extension:
$nombre_temporal = $_FILES['foto']['name'];
$subdividir = pathinfo( $nombre_temporal ); $extension = strtolower($subdividir['extension']); $nombre = strtolower(basename( $nombre_temporal ,'.'.$extension) ); // $subdividir['filename'] no funcion en php 5.1
// solo numero letras y guiones bajos
$nombre_limpio = preg_replace("/[^a-zA-Z0-9s]/", "_", $nombre);
if($es_album)
$nombre_disponible = checkear_preexistencia($nombre_limpio, $extension, $album_id);
else
$nombre_disponible = $nombre_limpio;
$nuevo_nombre = $nombre_disponible . "." . $extension;
// entensiones permitidas
$permitidas = array("jpg", "jpeg", "gif", "png");
{
if ($_FILES["foto"]["error"] > 0)
{
$respuesta['error'] = "Hubo un error: " . $_FILES["foto"]["error"] . "<br />";
}
else
{
// hago la miniatura
require_once UTILES.'miniaturizador/ThumbLib.inc.php';
$options = array('jpegQuality' => 80);
$temporal = $_FILES['foto']['tmp_name'];
try
{
$thumb = PhpThumbFactory::create($temporal, $options);
$zoom = PhpThumbFactory::create($temporal, $options);
}
catch (Exception $e)
{
$respuesta['error'] = "Error escalando la imagen.<br/>";
}
// guarda la foto recortada y minimizada
if($es_album)
{
if ($thumb->adaptiveResize( ANCHO_FOTO , ALTO_FOTO )->save($carpeta.$album_id."/".$nuevo_nombre))
if ($zoom->adaptiveResize( ANCHO_FOTO_ZOOM, ALTO_FOTO_ZOOM )->save($carpeta.$album_id."/zoom"."/".$nuevo_nombre)) // magnificadas
{
$respuesta['ok'] = true;
$respuesta['nombre_foto'] = $nuevo_nombre;
return $respuesta;
}
}
else
{
if ($thumb->adaptiveResize( ANCHO_FOTO , ALTO_FOTO )->save($carpeta.$nuevo_nombre)) // 228x140
return $nuevo_nombre;
return false;
}
}
}
else
{
$respuesta['error'] = "Archivo de foto invalido. Solo se admiten fotos de formato: .jpg .png or .gif<br/>";
return $respuesta;
}
}