Используйте PHP или Perl для правильного поворота изображений в формате JPEG

StackOverflow https://stackoverflow.com/questions/1718847

Вопрос

Я использовал F-Spot в Ubuntu, чтобы повернуть некоторые фотографии (файлы JPEG), прежде чем загрузить их на свой веб-сайт.Казалось, это сработало просто отлично.Однако, если эти изображения открыты в веб-браузере, они не отображаются повернутыми.Они также не работают, если я загружаю их на компьютер с Windows Vista и открываю там с помощью любой стандартной программы.Я подозреваю, что F-Spot вращает изображения путем изменения данных exif или чего-то подобного, а не путем фактического поворота изображений.

Итак, я хочу небольшую функцию, которая будет запускаться на моем веб-сервере (т. Е. PHP или Perl), которая будет принимать массив путей к файлам, проверять изображения и поворачивать те, которые необходимо повернуть, перезаписывая исходный файл.

Я немного знаю PHP, но не Perl.


В ходе поиска, чтобы узнать, задавался ли уже этот вопрос, я наткнулся на несколько идей.Возможно, я смогу, после некоторых проб и ошибок, собрать что-нибудь вместе, используя glob(), exif_read_data() и imagerotate().Я попробую завтра.Но сейчас я иду спать.

Это было полезно?

Решение

В Perl, я думаю, вы хотите "ориентация на exiftool".Эквивалент PHP, по-видимому, доступен через "exif_read_data" - "exif_read_data".

Другие советы

Копирую это непосредственно с веб-сайта 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);
?>

В Perl вы можете поворачивать изображения с помощью Изображение:: Магия модуль.Там есть Интерфейс 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top