Dropzone.js на сервере Flask разрушает изображение и разрушает альфа-канал при загрузке - PullRequest
0 голосов
/ 10 июля 2019

Когда я загружаю любой другой тип изображения, это не проблема.Это включает загрузку файлов .png с прозрачностью - альфа-канал сохраняется.При загрузке изображений TIF изображения деформируются.При восстановлении их с помощью opencv (распаковка изображения путем открытия, преобразования в RGB и повторного сохранения) альфа-канал пропадает.При открытии изображения вначале в opencv, форма была x на y на 3. Таким образом, альфа-канал был просто полностью очищен, и это не проблема для opencv.

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

Я искал способы конвертации изображений .tif на лету, когда они добавляются в очередь Dropzone, но я не могу найти способ сделать это.тот.

например, получить доступ к функциям прототипа Dropzone и выполнить преобразование по событию -> не удается найти библиотеку преобразования, которая работает без узла.

Этот код, вероятно, не поможет.Я на 99% уверен, что это не ошибка конфигурации, а скорее внутренняя ошибка в Dropzone, которую мне придется исправить.Мне просто нужно несколько советов о том, как это сделать.

Единственный код, имеющий отношение к Dropzone, находится в upload_form.html:

{{ dropzone.load_css() }}
{{ dropzone.style('border: 2px dashed #0087F7; margin: 10px 0 10px; min-height: 400px; width: 800px') }}

{{ dropzone.load_js() }}
{{ dropzone.config(custom_init='this.on("sendingmultiple", function(data, xhr, formData) {formData.append("league",
document.getElementById("league").value); formData.append("season",document.getElementById("season").value);
formData.append("nickname", document.getElementById("nickname").value);
formData.append("tricode", document.getElementById("tricode").value);}); this.on("successmultiple",
function(file, status){console.log(status);});') }}

И

app.py:

app.config.update(
    UPLOADED_PATH=os.path.join(basedir, 'uploads'),
    DROPZONE_ALLOWED_FILE_TYPE='image',
    DROPZONE_MAX_FILE_SIZE=8,
    DROPZONE_MAX_FILES=100,
    DROPZONE_UPLOAD_MULTIPLE=True,
    DROPZONE_PARALLEL_UPLOADS=10,
    DROPZONE_IN_FORM=True,
    DROPZONE_UPLOAD_ON_CLICK=True,
    DROPZONE_UPLOAD_ACTION='handle_upload',
    DROPZONE_UPLOAD_BTN_ID='submit',
)

Ожидается:

Загрузить изображение в формате tif, и изображение идентично изображению на сервере.

Фактическое значение:

Загрузитьtif image, изображение искажено (изображение подобно четырехкратному увеличению по оси x), и цвета неправильные.Это может быть исправлено открытием в Pillow или opencv, преобразованием из BGR в RGB и повторным сохранением.Хотя после этого все прозрачные части изображения (0,0,0) -> черные пиксели.Опять же, альфа-канал ОТСУТСТВУЕТ (форма 1200x800x3 вместо 1200x800x4) при открытии серверной копии в Pillow или opencv.

...