Как конвертировать формат heic в jpg, используя js, или php?

Ребята, кто-нибудь уже пробовал конвертировать эти форматы?

Пытаюсь конвертировать heic формат в один из популярных(jpg, png). Все делаю как в официальном репозитории этого формата:
Загрузка ридера
HEIFReader reader = new HEIFReader('test.heic');
reader.requestFileInfo(function(payload) {
  if(payload.success !== true) {
    console.error("Could not read file:", url);
  } else {
    var fileInfo = payload;
    console.log("FileInfo contents:", fileInfo);
  }
});
Получение данных heic файла
// META file containing still images
if (fileInfo.rootLevelMetaBoxProperties) {
  var masterContextId = fileInfo.rootLevelMetaBoxProperties.contextId;
  var masterItemIds = [];
  var imageFeaturesMap = fileInfo.rootLevelMetaBoxProperties.imageFeaturesMap;
  for (i in imageFeaturesMap) {
    if (imageFeaturesMap.hasOwnProperty(i) && imageFeaturesMap[i].isMasterImage === true) {
      masterItemIds.push(parseInt(i));
    }
  }

  console.log("Master images in the file:", masterItemIds);
}
Декодирование heic файла
/** Request decoded image data for given item id's.
 *  @param {number} contextId Id of the context.
 *  @param {Array.<number>} itemIds Array of item id's to be decoded.
 *  @param {function} callback Callback function that receives the payload as a parameter. */
this.requestImageData = function (contextId, itemIds, callback) {
  console.log(_name + ": REQUEST IMAGE DATA: " + itemIds);

  if (itemIds.constructor !== Array) {
    itemIds = [itemIds];
  }

  if (itemIds.length < 1) {
    return;
  }

  var stream = new Uint8Array();
  var decodeIds = [];
  var dependencies = {};
  var displayDependencies = {};
  for (var i = 0; i < itemIds.length; i++) {
    var refs = self._heifReader.getItemDecodeDependencies(contextId, itemIds[i]);
    for (var j = 0; j < refs.length; j++) {
      if (refs[j] !== itemIds[i]) {
        // Add dependency data to the stream if the id is not already listed in dependencies
        if(!(refs[j] in dependencies) && !(refs[j] in displayDependencies)) {
          dependencies[refs[j]] = true;
          stream = _appendBuffer(stream, new Uint8Array(self._heifReader.getItemDataWithDecoderParameters(contextId, refs[j])));
          decodeIds.push(refs[j]);
        }
      } else {
        // Item has itself as dependency => we want to display that item despite being a dependency
        displayDependencies[refs[j]] = true;
      }
    }
  }

  // Add data of the actual items to the stream (that already contains dependency data)
  for (i = 0; i < itemIds.length; i++) {
    stream = _appendBuffer(stream, new Uint8Array(self._heifReader.getItemDataWithDecoderParameters(contextId, itemIds[i])));
    decodeIds.push(itemIds[i]);
  }

  var payload = new Payload(true, [], 0, 0);
  self._hevcDecoder.pushRequestContext(new RequestContext(callback, decodeIds, stream, dependencies, payload));
  self._hevcDecoder.decode();
};

Самое странное начинается в строчке
self._hevcDecoder.decode();
В Wiki этого репозитория написано:
HevcDecoder decodes hevc encoded stream to RGBA image data.

Но по-сути я не получаю набор данных RGBA. Я получаю объект HevcDecoder(). Но как оттуда вытащить мои данные.

Если кто-нибудь пробовал конвертировать, помогите. А то я уже неделю сижу над этим(
  • Вопрос задан
  • 2497 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы