Perl - Использование Image :: Magick - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь использовать ImageMagick для манипулирования файлами .jpg.Я считаю, что я успешно установил его, потому что я могу преобразовать изображение .jpg в изображение .png в командной строке с помощью следующей команды:

convert   image.jpg    image.png

Однако, когда я пытаюсь загрузить модуль в сценариии выполнить скрипт, я получаю сообщение об ошибке «Не удается найти imagemagick.pm в @INC (вам может потребоваться установить модуль imagemagick)».

Как загрузить модуль Image :: Magick в скрипт?

#!/usr/bin/perl

use Image::Magick;   #load the ImageMagick module
use strict;
use warnings;

my $directory = 'path-to-images';

opendir my $dh2, $directory or die "Could not open file";

while (my $image = readdir($dh2)){
        my $convertedFileName = $image;  #assign current image to a variable
        $convertedFileName =~ s/.jpg/-convert.jpg/; #change name of file
        print "$convertedFileName\n";
        $convertedFileName = Image::Magick->new; #make ImageMagick object


           $convertedFileName->Quantize(colorspace=>'gray'); #alter the image
            }

    closedir $dh2;

1 Ответ

0 голосов
/ 29 ноября 2018

Наиболее вероятное объяснение состоит в том, что сообщение об ошибке говорит о том, что модуль Image :: Magick просто не установлен в вашей системе.С чего ты взял, что он установлен?Вы использовали это в других программах?Другие люди, использующие систему, используют ее?

Модуль Image :: Magick не является частью стандартной установки Perl.Это должно быть установлено отдельно.Похоже, вы используете Linux, и ваша строка shebang указывает на то, что похоже на системный Perl, поэтому самым быстрым подходом будет установка версии Image :: Magick, которая была предварительно упакована для вашего дистрибутива и которая будет доступнаиз стандартных репозиториев пакетов.

В системе типа RedHat (RHEL, Centos, Fedora и т. д.) введите:

sudo yum install ImageMagick-perl

(вам может понадобиться dnf вместо yumв более новых версиях Fedora.)

В системе, подобной Debian (Debian, Ubuntu и т. д.), введите:

sudo apt-get install libimage-magick-perl

Также существует по крайней мере одна проблема с вашим кодом.После создания объекта Image :: Magick (Image::Magick->new()) и перед выполнением какой-либо работы с ним ($convertedFileName->Quantize(colorspace=>'gray')) необходимо прочитать существующий файл в объект.Ваш код должен выглядеть примерно так:

while (my $image = readdir($dh2)){
    my $convertedFileName = $image;  #assign current image to a variable
    $convertedFileName =~ s/.jpg/-convert.jpg/; #change name of file
    print "$convertedFileName\n";

    # Note: I'm using a new variable here
    $image = Image::Magick->new; #make ImageMagick object

    $image->Read("$directory/$convertedFileName");
    $image->Quantize(colorspace=>'gray'); #alter the image
}
...