Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
まだJPEGで消耗してるの?/iOSDC-Reject-Conference
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Taketo Yoshida
August 30, 2016
Programming
3.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
まだJPEGで消耗してるの?/iOSDC-Reject-Conference
http://iosdc-reject-conference.connpass.com/event/37017/
で発表したスライド
Taketo Yoshida
August 30, 2016
More Decks by Taketo Yoshida
See All by Taketo Yoshida
Beautiful Japanese line break for the Web
tamanyan
1
650
新しい画像フォーマットHEIFを 用いたiOSアプリの通信量削減/iosdc-heif
tamanyan
9
6.8k
Source Code Generator for Team Development/code-generator-for-team-development
tamanyan
0
1.8k
How to Design Great Alerts/how-to-design-great-alerts
tamanyan
0
670
iOSエンジニアがReact-Nativeに触れてみた/ios-developer-react-native
tamanyan
0
510
フォーシームのスピン量とその効果/the-effect-of-fourseam-fastball-spin-rate
tamanyan
1
960
Objective-CからSwift移行を始めて感じた事/ObjC-to-Swift
tamanyan
1
1.6k
Modern and Practical Networking in Swift
tamanyan
2
850
SwiftでWebPを使ってみた/melon-swift-webp
tamanyan
1
1.6k
Other Decks in Programming
See All in Programming
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
360
GraphQL の onError と Nullability のこれから
quramy
0
210
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.2k
Secure Your Coding Agent Like It’s Malware (v1.5) 🇬🇧 @Code.talks 2026
richargh
0
110
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
510
Spec-driven Development with AI
simas
PRO
0
2.3k
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.8k
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
240
Next.js: The final boss of Web Performance
guaca
0
390
Performance Optimization With LLMs
xleitix
0
250
Engineering Biometric UX Across Android Versions | DroidKnights 2026
ryunen344
1
190
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
5
810
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How STYLIGHT went responsive
nonsquared
100
6.4k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
330
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Practical Orchestrator
shlominoach
192
12k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
From π to Pie charts
rasagy
1
440
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.7k
Bash Introduction
62gerente
615
220k
The Curse of the Amulet
leimatthew05
3
17k
The agentic SEO stack - context over prompts
schlessera
0
1k
Being A Developer After 40
akosma
PRO
92
590k
Transcript
1 ·ͩ+1&(Ͱফͯ͠Δͷʁ ʙ8FC1ͰΔշద৽ฉϥΠϑʙ ٢ా݈ਓຊܦࡁ৽ฉࣾσδλϧฤہฤ෦
2 ຊܦࡁ৽ฉࣾͷJ04ΤϯδχΞ ࣗݾհ ࢴ໘ϏϡʔΞʔΞϓϦͷ։ൃ (JUIVC!UBNBOZBO ٢ా݈ਓ :PTIJEB5BLFUP
3 গ͠Ͱը૾ͷ௨৴ྔΛݮΒͯ͠ μϯϩʔυΛ͍ͨ͘͠ʜ
4 J04্Ͱ8FC1Λ༻ͯ͠ಘͨ ݟΛൃද͠·͢
5 8FC1ͱʁ (PPHMF͕։ൃ͍ͯ͠Δը૾ϑΥʔϚοτ ՄٯѹॖͱඇՄٯѹॖͷ྆ํΛαϙʔτ ඇՄٯѹॖͰ+1&(ͱൺͯখ͘͞ͳΔ
6 ଞࣾͷ࠾༻ࣄྫ
7 IUUQXXXTMJEFTIBSFOFUTVTJFZZJPTJPT
8 IUUQUFDIMJGFDPPLQBEDPNFOUSZ
9 IUUQIPNFTEFTJHOFSTIBUFOBCMPHDPNFOUSZ
10 ܦͰࢴ໘ϏϡʔΞʔͰ8FC1Λ༻
11 ࢴ໘ΠϝʔδΛ8FC1Ͱ৴ +1&(ͱಉըૉͰݮ ಉըૉͰϊΠζΛখ͘͞ ˞݄ͷேץͰଌఆ
12 ༰ྔ.#ˠ.# μϯϩʔυඵˠඵ ˞݄ͷேץͰଌఆ
13 J04ʹͯ8FC1Λѻ͏ʹ
14 MJCXFCQΛ༻͢Δ IUUQTHJUIVCDPNXFCNQSPKFDUMJCXFCQ
15 private func freeImageData(info: UnsafeMutablePointer<Void>, data: UnsafePointer<Void>, size: Int) {
free(UnsafeMutablePointer<Void>(data)) } extension UIImage { static func imageFromWebPData(data: NSData) -> UIImage? { var config = WebPDecoderConfig() if WebPInitDecoderConfig(&config) == 0 { return nil } if WebPGetFeatures(UnsafePointer<UInt8>(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<UInt8>(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) } } MJCXFCQΛѻ͍͘͢͢ΔͨΊʹ&YUFOTJPOΛॻ͘
16 ϙΠϯλʔຬࡌͳΜͰ0CK$Ͱ ॻ͍ͨํָ͕͔ʜ
17 J04Ͱ8FC1αϙʔτ֎ͳͷʁ
18 IUUQXXXDOFUDPNOFXTBQQMFJPTNBDPTUFTUTHPPHMFTXFCQHSBQIJDTUPTQFFEVQXFC
19 αϙʔτŝŦᴸᴸᴸ ƅ˲ƅ ᴸᴸᴸ
20 J04CFUBͰݕূͯ͠Έͨ
21
22 ( ゚д゚) ・・・ (つд⊂)ゴシゴシ (;゚д゚) ・・・ (つд⊂)ゴシゴシゴシ
_, ._ (;゚ Д゚) …!?
23 Ͳ͏͍͏͜ͱͩͬͯΑ
24 5XJUUFSͰௐͯΈͨ
25
26
27 ͬͺŠŮᴸᴸᴸᴸ "A ᴸᴸᴸᴸ
28 ࠓͷͱ͜ΖMJCXFCQΛ͏͔͠ͳ͍
29 8FC1ͷύϑΥʔϚϯε
30 8FC1ͷύϑΥʔϚϯε ࣮ࡍ+1&(ͱൺֱͨ࣌͠ͷαΠζʁ μϯϩʔυ͔Βදࣔ·Ͱʹ͔͔Δ࣌ؒʁ ը࣭ͷධՁͲͷΑ͏ʹߦ͏ʁ
31 ݄ேץϖʔδࠂ໘ ˞.#ͷ1/( YQY
32 QY QY QY QY QY ͭͷαΠζͷը૾+1&(ͱ8Λ༻ҙ͢Δ
33 ࣮ࡍ+1&(ͱൺֱͨ࣌͠ͷαΠζʁ
34 ը૾ͷԣαΠζ QY +1&(ͷαΠζ ,# 8FC1ͷαΠζ ,#
dͷαΠζͷݮ
35 μϯϩʔυ͔Βදࣔ·Ͱʹ ͔͔Δ࣌ؒʁ
36 J04Ͱ8FC1Λ༻͢Δ࣌ σίʔυ࣌ؒΛߟྀ͢Δඞཁ͕͋Δ
37 EPXOMPBE࣌ؒ KQFHEFDPEF࣌ؒ +1&(ͷ߹ ࣮࣭ͷμϯϩʔυ࣌ؒ
38 EPXOMPBE࣌ؒ XFCQEFDPEF࣌ؒ 8FC1ͷ߹ ࣮࣭ͷμϯϩʔυ࣌ؒ
39 var start = NSDate() [download(url128a), download(url128b), download(url128c), download(url128d), download(url128e)].sequence().then
{ images in let elapsed = NSDate().timeIntervalSinceDate(start) NSLog(elapsed) } ͭͷϑΝΠϧΛಉ࣌ʹμϯϩʔυͯ͠6**NBHF·Ͱ མͱ͜͠Μͩ࣌ͷ࣌ؒΛ࣮࣭ͷμϯϩʔυ࣌ؒͱͯ͠ܭଌ ˞࣮ݧڥJ1IPOFT4PGUCBOL(-5&
40 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6
1.8 2 128 256 512 1024 2048 ) ( webp jpeg ը૾αΠζ͕େ͖͍΄Ͳ࣮࣭ͷμϯϩʔυ࣌ؒॖ͞ΕΔ
41 ը૾αΠζ͕େ͖͍΄Ͳ ௨৴ίετσίʔυίετ
42 ৽ฉͷΑ͏ͳըૉ͕ଟ͍ը૾ μϯϩʔυ͢ΔΞϓϦʹ༗ޮ
43 ը࣭ͷධՁͲͷΑ͏ʹߦ͏ʁ
44 44*. ͭͷը૾͕Ͳͷఔࣅ௨͍ͬͯΔ͔Λஅ͢Δख๏ Ұൠతʹ44*.ͷ͕Ҏ্͋ΕΦϦδφϧͱಉͷ࣭ αΠζΛ͑ͭͭྼԽ͠ͳ͍ϥΠϯͰύϥϝʔλΛௐ͢Δ
45 IUUQTHJUIVCDPNKUFSSBDFQZTTJN
46 ·ͱΊ
47 ·ͱΊ J04ͷ8FC1ͷαϙʔτΛকདྷతʹ͋Δ͔ ըૉ͕ଟ͍ը૾Λ͍ͬͯΔͳΒ8FC1Λ͏Ձ͕͋Δ 44*.Λར༻͢Δ͜ͱͰը࣭ͷධՁ͕Մೳ
48 5IBOLZPVGPSMJTUFOJOHUPNF