Slide 1

Slide 1 text

!.FMPOTXJGU ٢ా݈ਓ೔ຊܦࡁ৽ฉࣾ 4XJGUͰ8FC1Λ࢖ͬͯΈͨ

Slide 2

Slide 2 text

2 ٢ా݈ਓʢ:PTIJEB5BLFUPʣ ೔ຊܦࡁ৽ฉࣾͷJ04ΤϯδχΞ ࢴ໘ϏϡʔΞʔΞϓϦͷ։ൃ ϝϩϯ͸޷͖Ͱ͢ ࣗݾ঺հ

Slide 3

Slide 3 text

ࠓ೔͸J04Ͱ8FC1Λ࢖༻͢Δ࿩Λ͠·͢ 3

Slide 4

Slide 4 text

4 (PPHMF͕։ൃ͍ͯ͠Δը૾ϑΥʔϚοτ ՄٯѹॖͱඇՄٯѹॖͷ྆ํΛαϙʔτ ඇՄٯѹॖͰ͸+1&(ͱൺ΂ͯখ͘͞ͳΔ 8FC1ͱ͸ʁ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

6 8FC1,# +1&(,#

Slide 7

Slide 7 text

4XJGUͰ8FC1Λ࢖͏ʹ͸ʁ 7

Slide 8

Slide 8 text

8 // To build libwebp $ brew install libtool $ brew install automake $ brew install autoconf // Create WebP.framework $ git clone https://chromium.googlesource.com/webm/libwebp $ git checkout 0.5.1 $ ./iosbuild.sh -> WebP.framework Add the WebP Header to your bridging header #include

Slide 9

Slide 9 text

9 private func freeImageData(info: UnsafeMutablePointer, data: UnsafePointer, size: Int) { free(UnsafeMutablePointer(data)) } extension UIImage { static func imageFromWebPData(data: NSData) -> UIImage? { var config = WebPDecoderConfig() if WebPInitDecoderConfig(&config) == 0 { return nil } if WebPGetFeatures(UnsafePointer(data.bytes), data.length, &config.input) != VP8_STATUS_OK { return nil } config.output.colorspace = config.input.has_alpha != 0 ? MODE_rgbA : MODE_RGB if WebPDecode(UnsafePointer(data.bytes), data.length, &config) != VP8_STATUS_OK { return nil } let width = config.input.width let height = config.input.height let provider = CGDataProviderCreateWithData(nil, config.output.u.RGBA.rgba, config.output.u.RGBA.size, freeImageData) let colorSpaceRef = CGColorSpaceCreateDeviceRGB() let components = config.input.has_alpha != 0 ? 4 : 3 let bi = config.input.has_alpha != 0 ? CGBitmapInfo(rawValue: CGBitmapInfo.ByteOrderDefault.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue) : CGBitmapInfo.ByteOrderMask guard let imageRef = CGImageCreate( Int(width), Int(height), 8, components * 8, components * Int(width), colorSpaceRef, bi, provider, nil, true, .RenderingIntentDefault) else { return nil } return UIImage(CGImage: imageRef) } }

Slide 10

Slide 10 text

0CKFDUJWF$Ͱॻ͍ͨํ͕ॻ͖΍͍͢ 10

Slide 11

Slide 11 text

11 guard let url = NSURL(string: "path/to/image") else { return } NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in guard let data = data else { return } // Convert NSData to UIImage in Background Threads dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { let image = UIImage.imageFromWebPData(data) ?? UIImage(data: data) // Handle image } }

Slide 12

Slide 12 text

೔ܦͰ͸ࢴ໘ϏϡʔΞʔͰ8FC1Λ࢖༻ 12

Slide 13

Slide 13 text

13 ࢴ໘ΠϝʔδΛ8FC1Ͱ഑৴ +1&(ͱಉըૉ਺Ͱݮ˞ ಉըૉ਺Ͱ΋ϊΠζΛখ͘͞ ˞݄೔ͷேץͰଌఆ

Slide 14

Slide 14 text

೔ܦͰ͸ΤϯδχΞΛืूͯ͠·͢ 14 IUUQTTOJLLFJDPNTBJZP