Формат изображения WebP на iOS - PullRequest
6 голосов
/ 29 декабря 2011

В настоящее время я изучаю возможность использования формата изображений Google WebP в нашем программном обеспечении для iOS.

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

Однако я хотел бы создать реализацию, сравнимую с UIImage с точки зрения как API, так и производительности.

Q1.Можно ли в iOS разработать декодер изображений, чтобы нативные imageWithData и другие API-интерфейсы читали новый формат?

Q2.Если нет, какой API использует UIImageView (и другие элементы управления, предоставляемые платформой) для рисования UIImage?Это общедоступный (например, drawInRect / drawAtPoint) или внутренний?Могу ли я наследовать от UIImage, переопределить несколько методов (таких как + imageWithContentsOfFile, + imageWithData, + imageNamed, - drawInRect, -drawAtPoint), и чтобы мои объекты WPImage работали хорошо с API, предоставленными SDK?

Q3.Если каждый экземпляр моего гипотетического класса WPImage будет подписываться на UIApplicationDidReceiveMemoryWarningNotification (для очистки буфера изображения RGBA, оставляя намного меньше исходных данных WebP в оперативной памяти), не сильно ли это повредит производительности?Программное обеспечение, которое мы разрабатываем, может легко иметь сотни различных образов в оперативной памяти.

Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 02 августа 2013

Я сделал полный (декодировать / кодировать) UIImage упаковщик для WebP.

https://github.com/shmidt/WebP-UIImage

1 голос
/ 07 мая 2012
0 голосов
/ 15 июля 2013

Сначала декодируйте пиксели WebP в буфер. Затем вам нужно вызвать CGDataProviderCreateWithData (), чтобы создать «поставщика данных» для CoreGraphics, а затем вызвать CGImageCreate () и передать провайдера и все необходимые аргументы. Наконец, вызовите UIImage imageWithCGImage: imageRef для создания экземпляра UIImage.

0 голосов
/ 17 марта 2013

Другой пример, который я написал, использует работу, начатую Карсоном Макдональдом, но с возможностью многократного использования. По сути, вы добавляете WebP.framework в свой проект (включенный в мой пример или создаваемый с помощью инструкций, которые Карсон имеет на своем веб-сайте), а затем вы можете сделать что-то вроде этого:

#import "UIImage+WebP.h"
...

self.imageView.image = [UIImage imageFromWebP:@"path/to/image.webp"];
// or
[self.button setImage:[UIImage imageFromWebP:@"path/to/image.webp" 
        forState:UIControlStateNormal]];

Если вы хотите взглянуть на мой пример, перейдите сюда: https://github.com/nyteshade/iOSWebPWithAlphaExample

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...