我在Ubuntu上使用F-Spot旋转一些照片(JPEG文件),然后将它们FTP到我的网站。这似乎工作得很好。但是,如果这些图像是在Web浏览器中打开的,则它们不会显示为已旋转。如果我将它们下载到Windows Vista计算机并使用任何标准程序打开它们也不会。我怀疑F-Spot通过修改exif数据等来旋转图像,而不是实际旋转图像。
所以我想要一个能在我的网络服务器上运行的小功能(即PHP或Perl),它将接受一组文件路径,检查图像,并旋转那些需要旋转的文件,覆盖原始文件。
我知道一些PHP,但没有Perl。
在搜索是否已经问过这个问题的过程中,我发现了一些想法。在经过一些试验和错误之后,我可以使用glob(),exif_read_data()和imagerotate()将某些内容组合在一起。我明天再试。但现在我要睡觉了。
答案 0 :(得分:3)
在Perl中,您可以使用Image::Magick模块旋转图像。还有PHP interface和命令行界面(我认为)。如果您只是旋转几张图像,那么最好使用命令行版本。
这是一个简单的Perl脚本,可以顺时针旋转图像(并保留文件的修改时间):
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;
}
答案 1 :(得分:3)
直接从PHP网站复制:http://us.php.net/manual/en/function.imagerotate.php
该示例旋转图像180 学位 - 颠倒。
<?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);
?>
使用前面的示例将文件输出为新文件名:
// Output
imagejpeg($rotate, "new-" . $filename);
?>
答案 2 :(得分:2)
在Perl中,我认为你想要"exiftool -Orientation"。 PHP等价似乎可以通过"exif_read_data"访问。