Ошибка «Неверный параметр» для преобразования ImageMagick в Windows - PullRequest
16 голосов
/ 17 июня 2010

Я пытаюсь преобразовать документ PDF в файл PNG с помощью инструментов командной строки ImageMagick с веб-сайта ASP.NET. Я создаю новый процесс оболочки и выполняю следующую команду:

convert -density 96x96 "[FileNameAndPath].pdf" "[FileNameAndPath].png"

Это хорошо работает при тестировании веб-сайта на моем локальном компьютере с помощью сервера разработки ASP.NET VS, и команда также хорошо работает при ручном вводе в оболочку. При запуске из программно созданной оболочки в ASP.NET появляется следующее сообщение об ошибке:

Invalid Parameter - 96x96

Кто-нибудь знает, почему это происходит и что делать?

Я проверил команду при входе в систему на сервере через RDP с учетной записью другого пользователя, нежели процесс ASP.NET. Я использовал те же установочные файлы ImageMagick и Ghostscript, что и на моем локальном компьютере, и активировал добавление пути установки ImageMagick к переменным окружения во время установки. С тех пор сервер не перезагружался.

Ответы [ 6 ]

50 голосов
/ 27 января 2012

convert также является именем исполняемого файла Windows, который преобразует файловую систему FAT в NTFS. Если вы не укажете полный путь к исполняемому файлу, указывайте:

... система сначала ищет текущий рабочий каталог, а затем ищет переменную окружения path , проверяя каждую каталог слева направо, в поисках исполняемого файла, который соответствует указанному имени команды.

«C: \ Windows \ System32» обычно присутствует в начале переменной% PATH%, вызывая запуск утилиты преобразования Windows , которая завершается с ошибкой «Неверный параметр», как и ожидалось.

Попробуйте указать полный путь к ImageMagick's convert.exe следующим образом:

"C:\Program Files\ImageMagick\convert.exe" -density 96x96 "path_and_filename.pdf" "path_and_filename.png"
6 голосов
/ 15 февраля 2018

Как уже говорили другие convert указывает на другую программу в вашем PATH.Вместо этого предварите вашу команду magick.Таким образом, ваша команда вместо этого будет:

magick convert -density 96x96 "[FileNameAndPath].pdf" "[FileNameAndPath].png"
4 голосов
/ 21 июня 2010

В Window на самом деле существует «convert.exe» в system32 - убедитесь, что ваш скрипт не запускает его (возможно, пути среды на вашем компьютере разработки установлены по-другому).

2 голосов
/ 16 августа 2015

Еще пара опций для исправления:

  • Отредактируйте системную переменную Path, указав путь к imagemagick как это первый контент, а затем добавить остальное после него. Это сделает Windows всегда сначала находит imagemagic convert, прежде чем находит другая программа конвертирования. Так что-то вроде этого: C:\Program Files\ImageMagick-6.9.2-Q16;C:\Program Files\Haskell Platform\2014.2.0.0\lib\extralibs\bin;...

  • Другой вариант - создать специальную папку где-нибудь на вашем компьютере, где вы разместите ярлыки для некоторых из этих столкновений имен. Затем вы переименовываете эти ярлыки в значимые имена, например convert_image_magick, а затем добавляете путь к этой папке в системный путь. Так что теперь, когда вы нажмете кнопку Tab, вы, наконец, найдете нужную программу, которую хотите запустить

1 голос
/ 09 января 2019

Я отвечаю только так поздно, потому что imagemagick был обновлен.Теперь, если вы хотите использовать команду «конвертировать», вы делаете это так:

magick convert "image.png" "document.pdf"

или

magick convert "image_00*.png" "document.pdf"

для нескольких изображений.

Тот же синтаксисдля команды просто добавьте magick перед

1 голос
/ 18 августа 2012

да! если вы запустите командное окно администратора, по умолчанию оно будет C: \ windows \ sytem32 \ ..., пока вы не в этом каталоге, команда подберет ImageMagick convert.exe

Моя проблема заключалась в том, что я использовал команду "FORFILES", что сложно, потому что она требует использования «cmd / c» и передача команды convert с параметрами @path и @file, и она позволяет избежать слеша… не говоря уже о том, что это вызвало у меня многочасовые головные боли. Он даже анализирует шестнадцатеричные символы, например, если в вашем пути к файлу есть комбинация 0x00, он будет считать, что это шестнадцатеричное значение, и искажает ваш путь. У меня был путь к файлу с именем C:\ImageRes3000x3000 и FORFILES интерпретирует это буквально, и это вызвало странную проблему пути. Извините, если это длинный бесполезный пост, но он предназначен для вашей информации, если кто-то столкнется с этим, возможно, это поможет им. При этом FORFILES и "convert.exe" - это мощный и простой комбо сценария переименования строк.

вот мой полный сценарий переименования трехстрочного изображения

robocopy D:\SRC_DIR\ D:\DEST_DIR\_staging *.jpg /e /MAXAGE:2
FORFILES /P D:\DEST_DIR\_staging\ /S /M *.jpg /C "cmd /c convert.exe @path -quality 65 -resize 1500 D:\RESIZED_DIR\\@file"
DEL D:\DEST_DIR\_staging\*.* /S /Q
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...