#python #flask #imagemagick #imagemagick-convert
#python #flask #imagemagick #imagemagick-преобразовать
Вопрос:
У меня есть приведенный ниже код. По какой-то причине он выводит это искаженное изображение:
оригинал:
(Мне не разрешено использовать какие-либо готовые библиотеки Python в этом упражнении)
@app.route("/flip", methods=["POST"])
def flip():
# retrieve parameters from html form
if 'horizontal' in request.form['mode']:
direction = 90
elif 'vertical' in request.form['mode']:
direction = -90
filename = request.form['image']
# open and process image
target = os.path.join(APP_ROOT, 'static/images')
destination = "/".join([target, filename])
img = Image.open(destination)
subprocess.call(['C:Program FilesImageMagick-7.0.10-Q16-HDRImagick.exe', 'convert', f'{destination}', '-rotate', f'{direction}', f'{destination}'], shell=True)
# save and return image
destination = "/".join([target, 'flipped.jpg'])
if os.path.isfile(destination):
os.remove(destination)
img.save(destination)
return send_image('flipped.jpg')
РЕДАКТИРОВАТЬ: когда я устанавливаю целевое изображение в subprocess.call
значение flipped.jpg
— выводится исходное изображение. Почему?
Комментарии:
1. Вы почти наверняка не хотите
magick.exe convert INPUT OUTPUT
, потому что это вызывает специфическое, редко необходимое поведение. Вы, скорее всего, захотитеmagick.exe INPUT OUTPUT
, чтобы это было опущено'convert'
. Хотя я сомневаюсь, что это исправит. Попробуйте автономную команду в командной строке и посмотрите, ведет ли она себя так же, если да, мы можем исключить Python в качестве причины.2. Пожалуйста, поделитесь также точным файлом входного изображения — это JPEG или PNG?
3. Почему ты попал
img = Image.open()
туда иimg.save()
туда? Предполагается, что вы не должны использовать PIL.4. @MarkSetchell jpg. Правильно, я забыл убрать содержимое PIL.
5. @MarkSetchell Все еще — как я могу преобразовать исходное изображение в повернутое изображение, чтобы входные данные для каждого вызова
flip
поворачивали последнее (повернутое) изображение? То есть, как я могу переписать PIL-код без использования PIL?
Ответ №1:
Решаемая:
if 'horizontal' in request.form['mode']:
direction = 'flip'
elif 'vertical' in request.form['mode']:
direction = 'flop'
filename = request.form['image']
# open and process image
target = os.path.join(APP_ROOT, 'static/images')
destination = "/".join([target, filename])
subprocess.call(['C:Program FilesImageMagick-7.0.10-Q16-HDRImagick.exe',
'convert', f'{destination}', '-'f'{direction}', f'{destination}'],
shell=True)
return send_image(filename)
Комментарии:
1.Почему вы упорствуете
magick convert INPUT OPERATIONS OUTPUT
? Вы должны использоватьmagick INPUT OPERATIONS OUTPUT
withoutconvert
, как я предложил в комментариях.