Script para redimensionar y marca de agua en fotos

Hay algún Script en php que al subir fotografías mediante form con la función move_uploaded_file(); se compruebe las dimensiones width and height y si no cumplen las medidas mín. Redimensionaría dicha foto manteniendo las proporciones y creando una marca de agua tipo como hace segundamano. Es al subir las fotografías de los anuncios.

1 respuesta

Respuesta
1
Este código valida las imágenes que se quieran subir:
<?php
$ruta = "./imagenes/articulos/";
if (isset($_FILES['archivo']) && $_FILES['archivo']['size'] > 0) {
    $tamanyomax = 1000000; //tamaño en bytes
    $nombretemp = $_FILES['archivo']['tmp_name'];
    $nombrearchivo = $_FILES['archivo']['name'];
    $tamanyoarchivo = $_FILES['archivo']['size'];
    $tipoarchivo = GetImageSize($nombretemp);
    //if ($tipoarchivo[2] == 1 || $tipoarchivo[2] == 2) { //valido gif ^ jpg
        if ($tamanyoarchivo <= $tamanyomax){ //valido tamaño
            if (move_uploaded_file($nombretemp, $ruta . $nombrearchivo)) {
                echo "
<p>Detalle de imagen.</p>
<br>
                Tamaño de imagen: <b>$tamanyoarchivo</b> bytes<br>
                Nombre de imagen: <b>$nombrearchivo</b><br></p>
";
            } else {            
                echo "
<p>No se ha podido cargar el archivo.</p>
";
                }
        } else {
            echo "
<p>El archivo tiene más de <b>$tamanyomax bytes</b> y
            es demasiado grande.</p>
";
            }
        } else {
            echo "
<p>No es un archivo GIF
            o JPG válido.</p>
";
            }
$filehandle = opendir($ruta); //Abrir archivos
while ($file = readdir($filehandle)) {            
    if ($file != "." && $file != "..") {
        $tamanyo = GetImageSize($ruta. $file);
        }
    }echo "
<p><img src='$ruta$nombrearchivo'></img><br></p>
\n";//muestro la imagen almacenada
    closedir($filehandle);
?>
Ahora para mostrarlas al tamaño que tu quieras, debes espicificar la hoja php con código, es decir, restringir la tablka que contiene la imagen. Te agrego código:
$sql="SELECT * FROM articulos ORDER BY inv_id LIMIT $desde, $hasta";
$resultado= mysql_query($sql,$link);
        echo "
<div align=center>";
        echo "
<table align=center border=1 width=70%>
";
        echo "
<tr>
";
        echo "
<td align=center><b><font size=4>ID</font></b></td>
<td align=center><b><font size=4>Código</font></b></td>
<td width=50 align=center><b><font size=4>Imágen<font></b></td>
<td align=center><b><font size=4>Nombre</font></b></td>
<td align=center><b><font size=4>Stock</font></b></td>
<td align=center><b><font size=4>Familia</font></b></td>
<td align=center><b><font size=4>Acción</font></b></td>
";
        echo "
</tr>
";
while ($row = mysql_fetch_array($resultado)){
        echo "
<tr>
<td>$row[inv_id]</td>
<td>$row[inv_codigo]</td>
<td align=center><img class="cien" src=$row[inv_rutafoto]></img></td>
<td>$row[inv_nombre]</td>
<td align=center>$row[inv_stock]</td>
<td align=right>$row[inv_familia]</td>
<td align=center>
            <a href=editarf.php?inv_id=$row[inv_id]><img widht=32 height=32 border=0 src=../images/editar.gif></img></a>&nbsp&nbsp
            <a href=borrarf.php?inv_id=$row[inv_id]><img widht=32 height=32 border=0 src=../images/borrar.gif></img></a></td>
<BR>";
        }
        echo "
</tr>
";
        echo "
</table>
";
        echo "</div>
";
Ahora para poner alguna marca de agua, revisa el siguiente link, esta muy claro y fácil de entender:
http://www.elguruprogramador.com.ar/articulos/marcas-de-agua-automaticas-con-php-y-gd.htm
Ok, en este script lo que hace es comprobar las dimensiones y si las cumple las carga y si no pues no las carga.
Y lo que yo quiero es que si no cumple las dimensiones establecidas, automáticamente la redimencione respentando las proporciones ancho y alto y luego la cargue.
Gracias y saludos.
Ahí habría que buscar la función exacta para referirse al ancho y alto de una imagen.
Como en este caso se valida el tamaño:   $tamanyoarchivo = $_FILES['archivo']['size'];
Tendría que haber la validación para el ancho y alto. Buscaré a ver que encuentro.
Con eso tendríamos solo la validación. Ahora tu las quieres redimensionar para que se vean todas iguales cuando alguien quiera ver un listado o para otros fines. Pregunto, porque no sería necesario redimensar el archivo, ya que tendrías duplicados múltiples en la base de datos. Lo óptimo sería subir y guardar la imagen tal como viene y que al mostrarlas, se use alguna tabla con celdas forzadas a 100x100 por ejemplo.
Con eso usarías la misma imagen sin gastar recursos extras y mejorando la velocidad.
Exacto, lo que quiero es redimensionarla, pero manteniendo las proporciones ancho y alto, para que la imagen no se deforme.
¿Duplicados?, no, porque una vez se redimensione la imagen a subir se elimina la original. Con lo cual tendré todas las imágenes respetando la condición de las dimensiones.
Por ejemplo: condiciones de las dimensiones máx. 450x450 px.
El usuario desea subir una imagen que mide 450x616 px., cómo ves cumple una de las condiciones, entonces el script no quiero que la redimensione a 450x450 px. porque deformaría la imagen, sino que debe redimensionar el lado que incumple la condición que es la altura a 450 px., pero manteniendo la proporción que corresponde al ancho quedando la imagen final ya redimensionada a 329x450 px.
Espero me hayas entendido.
Saludos y gracias.
Encontré este simpático código por la web.
<? 
$im      = $_GET['im'];
$maxsize = $_GET['maxsize'];
if (strpos($im,"gif")==false){
if ($maxsize == '') {
    $maxsize = 100;
}
// The file
$filename = $im;
// Set a maximum height and width
$width  = $maxsize;
$height = $maxsize;
// Content type
header('Content-type: image/jpeg');
// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);
if ($width && ($width_orig < $height_orig)) {
    $width = ($height / $height_orig) * $width_orig;
} else {
    $height = ($width / $width_orig) * $height_orig;
}
// Resample
$image_p = imagecreatetruecolor($width, $height);
$image   = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// Output
imagejpeg($image_p);
imagedestroy($image);
imageDestroy($image_p);
}
//------------------------------------------------------------------   gif
else
{
if ($maxsize == '') {
    $maxsize = 100;
}
// The file
$filename = $im;
// Set a maximum height and width
$width  = $maxsize;
$height = $maxsize;
// Content type
  Header("Content-type: image/gif"); 
// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);
if ($width && ($width_orig < $height_orig)) {
    $width = ($height / $height_orig) * $width_orig;
} else {
    $height = ($width / $width_orig) * $height_orig;
}
// Resample
$image_p = imagecreatetruecolor($width, $height);
$image   = imagecreatefromgif($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// Output
 imageGif($image_p);
imagedestroy($image);
imageDestroy($image_p);
$fuente = @imagecreatefromgif($im);
}
?>
En caso que necesites más detalles del mismo te adjunto el link, había bastante información al respecto.
http://www.forosdelweb.com/f18/redimensionar-imagen-altura-ancho-fijos-sin-deformar-552007/
Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas