Почему jpegData не сохраняет мое измененное изображение? ОБНОВЛЕНО - PullRequest
0 голосов
/ 28 мая 2019

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

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

            let path = "/var/mobile/Containers/Data/Application/0595DE63-AE43-4DCF-9BD0-FB552844ECF5/Documents/tour15/H25.jpg"
            print("A",hotspotImage.image!.size)
            hotspotImage.image = hotspotImage.image!.resizeImage(2048, opaque: true)
            print("B",hotspotImage.image!.size)
            let fileManager  = FileManager.default
            try! fileManager.removeItem(atPath: path)
            try! hotspotImage.image!.jpegData(compressionQuality: 0.8)!.write(to: URL(fileURLWithPath: path), options: [.atomic])
            print("C",hotspotImage.image!.size)
            let  imageTest = UIImage(contentsOfFile: path)
            print("D",imageTest!.size)

В результате получается ...

A (4032.0, 3024.0)

B (2048.0, 1536.0)

C (2048.0, 1536.0)

D (4096.0, 3072.0)

Когда я получаю«обновленное» изображение имеет оригинальный размер.Вы не можете видеть это, но изображение определенно было заменено.

Очевидно, я упускаю что-то фундаментальное - пожалуйста, избавьте меня от моих страданий.

Извинения тем добрым людям, которые ответили ранее - но яТеперь обнаружили некоторую дополнительную и важную информацию.Размер примера нас всех обманул.Когда я изменил уменьшенный размер на 200 (а не точно на половину исходного размера), я получаю следующие результаты:

A (4032 3024)

B (200 150)

C (200 150)

D (400 300)

Итак, все, что происходит, удваивает размер, а не - как я раньше думал - не обновляется с новым размером.

Делает ли это яснее или больше загадкой?

И, говоря о головоломках, я получил -1, но никто не сказал, почему.

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Если он автоматически удваивает желаемый размер, звучит так, как будто применяется масштабирование экрана. Я бы изучил используемое расширение. Если для масштабирования задано значение 0,0, будет применено текущее масштабирование экрана.

Масштабирование экрана отлично подходит для изображений, которые появляются на экране. (Вот почему это называется масштабированием экрана.) Но при создании изображения, местом назначения которого не является экран, для масштабирования следует установить значение 1,0, чтобы сохранить желаемый размер, а НЕ удвоить или утроить его.

0 голосов
/ 28 мая 2019

UIImage(named:) кэширует изображения.Вы не читаете с диска во второй раз, когда вы называете это (я полагаю, вы называли это где-то раньше с тем же путем).Чтобы обойти кеш, вам нужно использовать init(contentsOfFile:)

. Следующее должно работать как положено:

let path = getAppFolder() + photoUrl
print("A",hotspotImage.image!.size)
hotspotImage.image = hotspotImage.image!.resizeImage(2048, opaque: true)
print("B",hotspotImage.image!.size)
let fileManager  = FileManager.default
try! fileManager.removeItem(atPath: path)
try! hotspotImage.image!.jpegData(compressionQuality: 0.8)!.write(to: URL(fileURLWithPath: path), options: [.atomic])
print("C",hotspotImage.image!.size)
let  imageTest = UIImage(contentsOfFile: path)
print("D",imageTest!.size)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...