0

Ubuntu で F-Spot を使用して、いくつかの写真 (JPEG ファイル) を回転させてから、FTP で Web サイトにアップロードしました。これはうまくいくように見えました。ただし、これらの画像を Web ブラウザで開いた場合、回転した状態で表示されません。また、それらを Windows Vista マシンにダウンロードして、そこにある標準プログラムで開いた場合も同様です。F-Spot は、実際に画像を回転させるのではなく、exif データなどを変更して画像を回転させているのではないかと思います。

そこで、Web サーバー (つまり、PHP または Perl) で実行される小さな関数が必要です。この関数は、ファイル パスの配列を受け取り、画像を調べ、回転する必要があるものを回転させ、元のファイルを上書きします。

PHP はある程度知っていますが、Perl は知りません。


この質問がすでに出されているかどうかを調べる過程で、いくつかのアイデアに出くわしました。試行錯誤の末、glob()、exif_read_data()、および imagerotate() を使用して何かを組み合わせることができるかもしれません。明日やってみます。でも今は寝ます。

4

3 に答える 3

3

Perl では、 Image::Magickモジュールを使用して画像を回転できます。PHP インターフェイスもあり、コマンドライン インターフェイスもあります (と思います)。いくつかの画像を回転させるだけの場合は、おそらくコマンド ライン バージョンを使用するのが最適です。

画像を時計回りに回転させる (そしてファイルの変更時刻を保持する) 簡単な 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;
}
于 2009-11-11T23:41:53.127 に答える
3

これを PHP Web サイトから直接コピー: 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);
?>
于 2009-11-11T23:45:46.850 に答える
2

Perl では、 「exiftool -Orientation」が必要だと思います。PHP の同等物は、"exif_read_data"からアクセスできるようです。

于 2009-11-16T15:16:23.943 に答える