Можно ли уменьшить размер изображения с помощью свойств decodeWidth и decodeHeight? - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь сохранить изображения, снятые с камеры онлайн.Но размер изображения превышает МБ.

Я сталкивался со свойствами decodeWidth и decodeHeight, но не понял, как это работает.Можно ли уменьшить размер изображения, взятого из этих свойств.

<StackLayout>
    <Image src="" decodeWidth="400" decodeHeight="400" loadMode="async" />
    <Label text="With loadMode set to async the UI won't be blocked" 
     textWrap="true" />
</StackLayout>

Мне нужно уменьшить размер изображения до 50px или меньше перед загрузкой.Как этого добиться.

Я пробовал что-то подобное, но у меня изображение не сохраняется.

 let ImageAsset = require('tns-core-modules/image-asset').ImageAsset;

  const asset = new ImageAsset("~/images/nature.jpg");
  asset.options = {
    width: 100,
    height: 100,
    keepAspectRatio: true
  };
  console.log(asset);

  const imageSourceModule = require("tns-core-modules/image-source");
  const fileSystemModule = require("tns-core-modules/file-system");
  const img = imageSourceModule.fromFile(asset._android);
  const folderRoot = fileSystemModule.knownFolders.documents();
  folderRoot._path = "/storage/emulated/0/";
  const folder = folderRoot.getFolder("AAAA/");
  const pathDest = fileSystemModule.path.join(folder._path, `sample.jpg`);

  const exists = fileSystemModule.File.exists(pathDest);

  if (exists == true) {
    const saved = img.saveToFile(pathDest, "jpg");
    if (saved) {
      console.log("Image saved successfully!");
    }
  } else {
    console.log("Image not saved successfully!");
  }
console 

JS: {
JS:   "_observers": {},
JS:   "_options": {
JS:     "width": 100,
JS:     "height": 100,
JS:     "keepAspectRatio": true
JS:   },
JS:   "_android": "/data/data/org.nativescript.cameraplus/files/app/images/nature.jpg"
JS: }
JS: Image not saved successfully!

1 Ответ

2 голосов
/ 04 июня 2019

decodeWidth / decodeHeight помогает загрузить изображение с более низким разрешением для компонента Image.

Чтобы получить изображение с измененным размером, вы можете сделать что-то вроде

import { ImageAsset } from 'tns-core-modules/image-asset';

const asset = new ImageAsset(path);
asset.options = {
  width: 100,
  height: 100,
  keepAspectRatio: true
};

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

Обновление:

Чтобы сохранить изображение, используйте модуль источника изображения следующим образом

imageSourceModule.fromAsset(asset)
 .then(img => img.saveToFile(pathDest, "jpg"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...