Kullanım PHP veya Perl düzgün JPEG görüntüleri döndürmek için

3 Cevap php

Web siteme onları FTPed önce bazı fotoğrafları (JPEG dosyaları) döndürmek için Ubuntu üzerine F-Spot kullanılır. Bu sadece iyi çalışmak gibiydi. Bu görüntüler bir web tarayıcısında açıldı eğer döndürülmüş Ancak, onlar görünmüyor. Ne de Windows Vista makinenize indirebilirsiniz eğer onlar yapmak ve orada herhangi bir standart programıyla açın. Ben, F-Spot aslında görüntüleri çevirerek exif veri veya benzeri değil, değiştirerek görüntüleri döner sanıyorum.

Yani, dosya yolları bir dizi kabul görüntüleri incelemek ve orijinal dosyanın üzerine yazarak, döndürülmesi gerekebilir olanlar dönecektir benim web sunucusu (örneğin, PHP veya Perl) üzerinde çalışacak bir küçük işlevi istiyorum.

Bazı PHP ama hiçbir Perl biliyorum.


Bu soru zaten sorulmuş olmuştu olup olmadığını görmek için arama derste, bazı fikirler geldi. I) topak (kullanarak birlikte bir şeyler devirmek için bazı deneme yanılma sonra, mümkün olabilir, exif_read_data (), ve imagerotate (). Ben yarın deneyeceğim. Ama şimdi ben yatmaya gidiyorum.

3 Cevap

Perl, ben size "exiftool -Orientation" istediğini düşünüyorum. PHP eşdeğer "exif_read_data" aracılığıyla ulaşılabilir görünmektedir.

PHP web sitesinden doğrudan bu kopyalama: http://us.php.net/manual/en/function.imagerotate.php

This example rotates an image 180 degrees - upside down.

<?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);
?>

Yeni bir dosya çıktı dosyası, önceki örnekte kullanarak:

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

Perl Eğer Image::Magick modülünü kullanarak görüntüleri döndürebilirsiniz. Orada bir PHP interface çok, ve bir komut satırı arayüzü (Bence). Eğer sadece bir kaç dönen görüntüleri ediyorsanız muhtemelen komut satırı sürümü ile kapalı en iyi konum.

İşte görüntüler saat yönünde döndürmek için basit bir Perl script (ve dosyaları 'değişiklik zamanını korur):

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;
}