Как изменить размер, а затем преобразовать тип изображения с помощью CGI :: ImageMagick? - PullRequest
1 голос
/ 04 декабря 2010

У меня так много проблем, чтобы понять это.Ниже приведен подробный пример со многими проблемами, но, надеюсь, что, если не считать попытки этого новичка, кто-нибудь подскажет мне, как это сделать.

use LWP::Simple;
use Image::Resize;
use CGI::ImageMagick;

sub convertandsave {
    # This is my remote site where I am grabbing the image from
    my $url = 'http://someremotedomain.example.com/';

    # Actually, the $image name is $_[0], but for this post I wanted to be clear
    my $image = '6226701.bmp';

    # Displays full size
    my $showimage = '<img src="$url/$image">';
    print qq~Full Size: $showimage <br />~;

    # this is crude, but I absolutely know the last three chars are the image type
    my $image       = lc '6226701.bmp';
    my $remoteimage = "$url/$image";
    my $imagetype   = substr($image, -3, 3);
    print qq~$imagetype<br />~;

    # Save the full sized image locally
    my $savelocal = LWP::Simple::getstore($imageurl, $image);

    # Below are notes and attempts
    # convert a.bmp a.jpg;????
    # if ($imagetype ne 'jpg'){
    #     my $cmd = "imgcvt -i $imagetype -o jpg $old.$cnt $new.$cnt";
    #     print $cmd."\n";
    #     if (system($cmd)) { print "imgcvt failed\n"; }
    # }

    my $thumb = $image;
    my @thumb = split(/./, $thumb);
    my $new   = "$thumb[0].jpg";

    #my $gd = $image1->convert($image1, $new);
    my $new = new CGI::ImageMagick(size => '120x100');
    my $thumb = new CGI::ImageMagick(convert => $image, $new);

    #my $magick> convert rose.jpg rose.png;
    #my $gd = $image1->convert(120, 120);
    # This did work for resizing
    my $thumbnail = Image::Resize->new($image);
    my $gd = $thumbnail->resize(120, 120);

    # open(FH, ">$thumbnail");
    # print FH $thumbnail->jpeg();
    # close(FH);
    # Shows results of my continual failures
    print qq~$image<br />~;
    print qq~$new<br />~;
    print qq~$thumb<br />~;
    exit;
}

Все, что я хочу выяснить с этим вопросом, - это как изменить размер изображения, преобразовать его в JPEG, а затем сохранить его.Не беспокойтесь обо всех других вещах, которые я испортил, и обо всех моих нелепых попытках.Я подумал, что, возможно, показ моих попыток поможет уточнить мой желаемый результат.

Я действительно ценю всю помощь, которую я получаю здесь.

1 Ответ

3 голосов
/ 05 декабря 2010

CGI::ImageMagick не работает так, как вы предполагаете. Вы не поняли документацию. Вы хотите использовать Image::Magick или просто Image::Resize или просто один из готовых модулей миниатюр . Ниже приведены рабочие примеры.

$savelocal назван неуместно. getstore возвращает код ответа. Кроме того, вы ничего не делаете с этой переменной впоследствии. Вы должны включить проверку ошибок.

Используйте File::LibMagic для определения типов файлов локальных файлов. Неправильное выполнение (расширение имени файла) требует больше усилий и строк кода. Это даже совсем не обязательно; поскольку вы извлекаете изображение по HTTP, доверяйте его заголовку Content-Type. В этом примере я пропускаю это, поскольку модуль поддерживает автоопределение формата изображения.

split /./ не делает то, что вы думаете, делает.


# working on a local file
use Image::Thumbnail;
my $t = Image::Thumbnail->new(
    size       => 120,
    input      => '6226701.bmp',
    outputpath => '6226701-thumbnail.jpg',
);
$t->create or die "Could not create thumbnail - error: $t->{error} - warning: $t->{warning}\n";

# fetching an image, then working on it without explicitely saving it first locally
use Image::Thumbnail;
use LWP::UserAgent;
my $image_name = '6226701.bmp';
my $response = LWP::UserAgent->new->get('http://someremotedomain.example.com/' . $image_name);
die "Could not fetching image: $response->status_line\n" unless $response->is_success;

my $t = Image::Thumbnail->new(
    size       => 120,
    input      => \$response->decoded_content, # scalar ref = in-memory access
    outputpath => "$image_name-thumbnail.jpg",
);
$t->create or die "Could not create thumbnail - error: $t->{error} - warning: $t->{warning}\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...