В современной веб-разработке формат WebP становится стандартом благодаря высокому качеству при малом весе файла. Однако пользователи 1С часто сталкиваются с проблемой: старые версии платформы или сторонние системы не умеют работать с этим форматом «из коробки». В этой статье мы подробно разберем, почему простая замена расширения файла не работает, и рассмотрим все доступные способы конвертации — от штатных средств 1С до использования мощных внешних утилит.
Прежде чем перейти к решениям, проанализируем техническую сторону вопроса. Многие пользователи пытаются просто изменить расширение файла с .webp на .jpg. Важно понимать, что расширение — это лишь «ярлык» для операционной системы. Сам формат файла определяется его внутренней структурой (заголовками).
Файл WebP базируется на контейнере RIFF, и его первые байты всегда содержат сигнатуру RIFF....WEBP. В то же время JPEG использует совершенно иную структуру (JFIF). Когда вы переименовываете файл, 1С по-прежнему видит внутри данные WebP, не находит ожидаемых заголовков JPEG и выдает ошибку или некорректно отображает картинку. Используя универсальные методы работы с двоичными данными, выясним, как выполнить реальное преобразование содержимого.
Рассмотрим самый простой и современный метод. Если вы используете платформу версии 8.3.22 или более новую, у нас есть отличная новость: фирма «1С» добавила нативную поддержку WebP. Теперь платформа умеет и читать, и записывать этот формат без использования сторонних программ.
Разберем пример кода, который загружает картинку в формате WebP (удобно через массовая загрузка изображений из файлов и ссылок) и сохраняет её как JPEG (также полезно изучить внутренние методы сжатия данных в платформе):
// Предположим, у нас есть двоичные данные файла WebP
ДвоичныеДанныеWebP = Новый ДвоичныеДанные("C:\temp\image.webp");
// Создаем объект Картинка на основании этих данных
МояКартинка = Новый Картинка(ДвоичныеДанныеWebP);
// Сохраняем картинку в формате JPEG
// Платформа сама выполнит перекодирование "на лету"
МояКартинка.Записать("C:\temp\image.jpg", ФорматКартинки.JPEG);
Этот метод является наиболее предпочтительным, так как он не требует установки дополнительного ПО и работает максимально быстро, по аналогии с решениями по преобразованию PDF в массив картинок штатными средствами.
Проанализируем ситуацию, описанную в обсуждении. Часто изображения на сайтах (например, у крупных ритейлеров вроде «Магнита») отдаются через специальный сервис-прокси, такой как imgproxy. В ссылке на картинку часто можно увидеть параметры обработки, например @webp в конце строки.
Если сервер настроен гибко, мы можем попросить его отдать нам картинку в нужном формате сразу, изменив URL. Попробуем следующие варианты:
.../image@webp попробуйте указать .../image@jpg.@webp заставляет сервер отдать исходный файл (обычно это JPEG или PNG).Важное примечание: Если ссылка «подписана» (содержит защитный токен/хеш), любое изменение параметров приведет к ошибке 403 Forbidden. В этом случае сервер не позволит нам менять формат на лету, и придется скачивать WebP и конвертировать его локально — для этого есть автоматическая загрузка изображений из HTTP-источников.
Если ваша платформа 1С старше версии 8.3.22, или вам нужно выполнять массовую конвертацию с высокой скоростью, воспользуемся проверенным инструментом — ImageMagick. Это мощный кроссплатформенный пакет для автоматизации работы с изображениями.
Разберем по шагам, как настроить конвертацию из 1С:
ЗапуститьПриложение для вызова консольной команды.Пример программного вызова конвертации:
ПутьККонвертеру = "C:\Program Files\ImageMagick-7.1.0-Q16\magick.exe";
ФайлИсточник = "C:\temp\input.webp";
ФайлРезультат = "C:\temp\output.jpg";
// Формируем строку команды
ПараметрыЗапуска = СтрШаблон("convert ""%1"" ""%2""", ФайлИсточник, ФайлРезультат);
// Запускаем процесс и ждем завершения
ЗапуститьПриложение(ПутьККонвертеру + " " + ПараметрыЗапуска, , Истина);
Этот способ крайне надежен и поддерживает огромное количество настроек (сжатие, изменение размера, удаление метаданных) — для этого подойдёт загрузка и оптимизация фото через ImageMagick.
Если ImageMagick кажется вам слишком тяжелым, рассмотрим использование официальной утилиты от разработчиков формата WebP — dwebp.exe. Она входит в пакет libwebp.
Преимущество этого метода в том, что исполняемый файл весит очень мало. Вы можете включить его прямо в состав вашей конфигурации 1С как Макет (типа «Двоичные данные»).
Алгоритм действий будет следующим:
dwebp.exe из макета во временный каталог.dwebp.exe input.webp -o output.jpg.Посмотрим на ситуацию с другой стороны. Поле HTML-документа в 1С (особенно на движке Chromium) умеет отображать WebP. Мы можем использовать это для «хитрой» конвертации без внешних файлов.
Суть метода заключается в отрисовке изображения на элементе canvas и последующем извлечении данных в формате JPEG:
// В коде JS внутри HTML-поля:
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var img = new Image();
img.onload = function() {
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
// Получаем строку Base64 в формате JPEG
var dataURL = canvas.toDataURL('image/jpeg', 0.85);
// Передаем данные обратно в 1С
};
img.src = 'data:image/webp;base64,' + Base64ДанныеWebP;
Этот метод сложнее в реализации, но он позволяет избежать установки стороннего ПО и работает в рамках безопасности браузерного движка.
Если задача стоит не в программной автоматизации, а в удобстве пользователя, который вручную скачивает картинки, проанализируем возможности браузеров. Существуют расширения, такие как "Save Image as Type" для Chrome. После его установки при нажатии правой кнопкой мыши на любое изображение (включая WebP) в контекстном меню появится пункт «Сохранить как JPG/PNG». Это избавляет от необходимости совершать какие-либо дополнительные действия после скачивания.
Мы проанализировали различные подходы к решению проблемы. Выбор метода зависит от ваших условий:
Картинка.Помните, что формат WebP — это не просто расширение, а другой способ упаковки данных, поэтому правильная конвертация всегда требует перекодирования содержимого файла.