Копируя изображение, теряет данные Exif - PullRequest
5 голосов
/ 04 января 2011

Я копирую изображение в личный каталог следующим образом:

FileChannel source = null;
FileChannel destination = null;
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size());
source.close();
destination.close();

.. но когда я вставляю его обратно в Галерею, нетронутым, позже:

private void moveImageToGallery(Uri inUri) throws Exception {
    MediaStore.Images.Media.insertImage(getContentResolver(), ImageUtil.loadFullBitmap(inUri.getPath()), null, null);
}

.. он, видимо, теряет свои данные Exif.Вращение больше не работает.Есть ли способ, которым я могу скопировать файл изображения и не потерять эти данные?Спасибо за любые предложения.

1 Ответ

2 голосов
/ 09 марта 2013

FileChannel здесь, кажется, фактически читает данные, декодирует их, перекодирует, а затем записывает их;таким образом теряя данные EXIF.Копирование файла (побайтовое) не меняет его содержимого.Единственное, что может произойти до / после копирования, - это изменение доступа к файлу (помните: Android основан на Linux, Linux - это UNIX => разрешения rwx (см. chmod )), что в конечном итоге запрещает чтение илизапись файла.Итак, ясно, что FileChannel делает что-то нежелательное.

Этот код сделает всю работу:

InputStream in = new FileInputStream(source);
OutputStream out = new FileOutputStream(dest);
byte[] buf = new byte[1024]; int len;
while ((len = in.read(buf)) > 0)
    out.write(buf, 0, len);
in.close();
out.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...