Pergunta

Usei o F-Spot no Ubuntu para girar algumas fotos (arquivos JPEG) antes de enviá-las por FTP para o meu site.Isso pareceu funcionar muito bem.No entanto, se essas imagens forem abertas em um navegador da web, elas não serão exibidas como giradas.Nem o fazem se eu baixá-los para uma máquina com Windows Vista e abri-los com qualquer programa padrão.Suspeito que o F-Spot gira as imagens modificando os dados exif ou similares, e não girando as imagens.

Então, eu quero uma pequena função que será executada em meu servidor web (ou seja, PHP ou Perl), que aceitará uma variedade de caminhos de arquivo, examinará as imagens e girará aquelas que precisam ser giradas, sobrescrevendo o arquivo original.

Eu conheço um pouco de PHP, mas não conheço Perl.


Ao pesquisar se essa pergunta já havia sido feita, me deparei com algumas ideias.Talvez eu consiga, depois de algumas tentativas e erros, juntar algo usando glob(), exif_read_data() e imagerotate().Vou tentar amanhã.Mas agora vou para a cama.

Foi útil?

Solução

Em Perl, acho que você quer "exiftool -Orientação".O equivalente PHP parece ser acessível através "exif_read_data".

Outras dicas

Copiando isso diretamente do site PHP: http://us.php.net/manual/en/function.imagerotate.php

Este exemplo gira uma imagem 180 graus - de cabeça para baixo.

<?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 gerar o arquivo com um novo nome de arquivo, usando o exemplo anterior:

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

Em Perl você pode girar imagens usando o Imagem::Magia módulo.Há um interface PHP também e uma interface de linha de comando (eu acho).Se você estiver apenas girando algumas imagens, provavelmente será melhor usar a versão de linha de comando.

Aqui está um script Perl simples para girar imagens no sentido horário (e preservar o tempo de modificação dos arquivos):

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top