Utilizzare PHP o Perl per ruotare correttamente le immagini JPEG
Domanda
Ho usato F-Spot su Ubuntu per ruotare alcune foto (file JPEG) prima che io li FTPed fino al mio sito web. Questo sembrava funzionare bene. Tuttavia, se tali immagini sono aperte in un browser Web, non mostrano come ruotato. Né essi se li posso scaricare a una macchina Windows Vista e aprirli con qualsiasi programma standard lì. Sospetto che F-Spot ruota le immagini modificando i dati exif o simili, non dal fatto ruotare le immagini.
Quindi voglio un po 'di funzione che verrà eseguito sul mio server web (ad esempio, PHP o Perl), che accetta un array di percorsi di file, esaminare le immagini, e ruotare quelli che hanno bisogno di essere ruotato, sovrascrivere il file originale.
So che alcuni PHP, ma non Perl.
Nel corso della ricerca per vedere se tale questione era già stato chiesto, mi sono imbattuto in alcune idee. Potrei essere in grado, dopo alcuni tentativi ed errori, a bussare qualcosa insieme utilizzando glob (), exif_read_data (), e imagerotate (). Ci proverò domani. Ma ora vado a letto.
Soluzione
In Perl, Penso che si desidera "ExifTool -Orientation" . Il PHP equivalente sembra essere accessibili attraverso "exif_read_data" .
Altri suggerimenti
Copia questo direttamente dal sito Web PHP: http: //us.php .net / manuale / it / function.imagerotate.php
Questo esempio ruotare un'immagine 180 gradi -. a testa in giù
<?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);
?>
Per l'output del file ad un nuovo nome, utilizzando dell'esempio precedente:
// Output
imagejpeg($rotate, "new-" . $filename);
?>
In Perl è possibile ruotare le immagini utilizzando le href="http://search.cpan.org/perldoc?Image::Magick" :: modulo Magick . C'è un href="http://www.imagemagick.org/script/perl-magick.php" rel="nofollow noreferrer"> un'interfaccia PHP troppo, e un'interfaccia a riga di comando (credo) . Se sei solo a rotazione alcune immagini siete probabilmente migliori fuori con la versione a riga di comando.
Ecco un semplice script in Perl per ruotare le immagini in senso orario (e conserva ora di modifica dei file):
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;
}