Pregunta

Utilicé F-Spot en Ubuntu para rotar algunas fotos (archivos JPEG) antes de que las hice hasta mi sitio web. Esto parecía funcionar bien. Sin embargo, si esas imágenes se abren en un navegador web, no se muestran como rotadas. Tampoco los descargo en una máquina de Windows Vista y las abro con cualquier programa estándar allí. Sospecho que F-Spot gira imágenes modificando los datos de Exif o similares, no rotando las imágenes.

Por lo tanto, quiero una pequeña función que se ejecute en mi servidor web (es decir, PHP o Perl) que aceptará una variedad de rutas de archivo, examinará las imágenes y girará las que necesitan ser rotadas, sobrescribiendo el archivo original.

Conozco un PHP pero no Perl.


En el curso de la búsqueda para ver si esta pregunta ya se había hecho, me encontré con algunas ideas. Podría, después de un poco de prueba y error, para juntar algo usando globa (), exif_read_data () e imageTate (). Lo intentaré mañana. Pero ahora me voy a la cama.

¿Fue útil?

Solución

En Perl, creo que quieres "exiftool -orientación". El equivalente de PHP parece ser accesible a través de "exif_read_data".

Otros consejos

Copiar esto directamente desde el sitio web de PHP: http://us.php.net/manual/en/function.imagerotate.php

Este ejemplo gira una imagen de 180 grados, al revés.

<?php
// File and rotation
$filename = 'test.jpg';
$degrees = 180;

// Content type
header('Content-type: image/jpeg');

// Load
$source = imagecreatefromjpeg($filename);

// Rotate
$rotate = imagerotate($source, $degrees, 0);

// Output
imagejpeg($rotate);
?>

Para emitir el archivo a un nuevo nombre de archivo, utilizando un ejemplo anterior:

// Output
imagejpeg($rotate, "new-" . $filename);
?>

En perl puedes rotar imágenes usando el Imagen :: Magick módulo. Hay una Interfaz PHP también, y una interfaz de línea de comandos (creo). Si solo está girando algunas imágenes, es probable que sea mejor con la versión de la línea de comandos.

Aquí hay un script Perl simple para rotar las imágenes en sentido horario (y conserva el tiempo de modificación de los archivos):

use strict;
use warnings;
use Image::Magick;

die "no filename specified!\n" if not @ARGV;

foreach my $filename (@ARGV)
{
    print "Processing: $filename\n";

    # Get the file's last modified time for restoring later
    my $mtime = (stat $filename)[9];

    my $image = Image::Magick->new;
    my $result = $image->Read($filename);
    warn "$result" if $result;
    $result = $image->Rotate(degrees => 90.0);
    warn "$result" if $result;
    $result = $image->Write($filename);
    warn "$result" if $result;

    # Restore the mtime
    utime time, $mtime, $filename;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top