Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【20250622】クライアントサイドで_ 高品質画像圧縮したいからウェブアプリ版 Squoo...
Search
asaringo
June 25, 2025
Programming
0
68
【20250622】クライアントサイドで_ 高品質画像圧縮したいからウェブアプリ版 Squoosh参照してwasmに手を出す
間違いあったら優しく教えてください
asaringo
June 25, 2025
Tweet
Share
More Decks by asaringo
See All by asaringo
[初登壇@jAZUG]アプリ開発者が気になるGoogleCloud/Azure+wasm/wasi
asaringo
0
270
Other Decks in Programming
See All in Programming
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
170
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
640
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
290
AtCoder Conference 2025
shindannin
0
930
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
250
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
150
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
660
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
1.7k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
710
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
5.3k
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Music & Morning Musume
bryan
46
7k
What does AI have to do with Human Rights?
axbom
PRO
0
1.9k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.2k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Abbi's Birthday
coloredviolet
0
4.3k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
280
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
0
1k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Paper Plane
katiecoart
PRO
0
45k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Transcript
クライアントサイドで 高品質画像圧縮したいから ウェブアプリ版 Squoosh 参照してwasmに手を出す 2025/06/22 あさりんご
徒然なるままに… wasmとの出会いを振り返る 結論ありきの順番ではなく、 探索していった時の順番で話してみる (スピーチ結論から話せと言われがちだけどほんとかな? ということでお試ししてみる)
Squoosh Googleが提供しているオープンソースの高品質画像圧縮アプリ ⇒今回はこのオープンソースから、mozjpeg(C言語の高品質画像 圧縮ライブラリ)をwasmにしてjsから呼べるようにしてみる
ここっぽい
すでにwasmのファイルあるっぽいけど、 生成方法は…? ( ゚Д゚) こやつか! 名前的に!
ぐっ… _(´ཀ`」 ∠)_
いったん理解より動かすの優先でいこ Emscriptenを使えるようにするぞ☆ bashで以下コマンドどん git clone https://github.com/emscripten-core/emsdk.git cd /mnt/c/Users/[お名前]/source/repos/emsdk ./emsdk install
latest ./emsdk activate latest source ./emsdk_env.sh 動かしてくうちにわかってくるだろ… ^^) _旦~~
MakefileをEmscriptenに読ませるぞ bashで以下コマンドどん git clone https://github.com/GoogleChromeLabs/squoosh.git cd /mnt/c/Users/[お名 前]/source/repos/squoosh/codecs/mozjpeg/ emmake make
最初makeだけで打っててうまくいかずなんでや…? とかなってた思ひ出 Emscriptenつかうのだから、それ用のコマンドを!
あれ足りないこれ足りない言われる エラー文言に従ってとにかく sudo apt update && sudo apt install [パッケージ名]
できたので使ってみる 生成されたmozjpeg_enc.js ⇒約3000行のコード(;´∀`)コレモウワカンネエナ このjsどうやって使うんや… いったんexportとかないかな ⇒最後の行にexport default Moduleあった ⇒多分importして使えばいいけど、何のメソッドが使えるんや…
これなに?
mozjpeg_enc.cpp⇒バインドファイル Makefileに指定ある バインドファイルを自由に書き換えて何を生成するか決められるんだ jsから何が呼び出せるものかはここ見ればわかるんだ! mozjpeg_enc.cpp Makefile
Mozjpeg_enc.cpp内のコメント • // The code below is basically the `write_JPEG_file`
function from • // https://github.com/mozilla/mozjpeg/blob/master/example.c • // I just write to memory instead of a file. ここ肝である感 I just wirteとかいってるけどめっちゃ大事なことしてくれてる... そこにしびれるあこがれる...☆
使ってみる 生成したmozjpeg_enc.jsとmozjpeg_enc.wasmを 使用したいプロジェクトに連れていく import MozjpegEnc from [ファイルの場所] const mozjpegEnc =
await MozjpegEnc(); const result = mozjpegEnc.encode([画像],[画像の横幅],[画像の 縦幅],[オプション]) ※詳しくはmozjpeg_enc.cpp参照
CanvasAPIで画像圧縮したのと 見た目品質あんま変わらんのやが…(^_^;) • CanvasAPIが使用するのはブラウザ内蔵のjpegエンコーダ/デ コーダ(具体的な実装不明) ⇒こやつ…そこそこ優秀なのでは • オプションをもう少しちゃんといじればよくなる? • そしてCanvasAPIのほうでOKとなったので、
難しいmozjpegとはバイバイしました。
いろいろ新体験 • Emscriptenをつかってみること • chatGPTヘルプもらいつつオープンソースのコードを見てみること • オープンソースから拝借してくること(していいんだ!) • C++に触れる •
個人がGitHubにコードを公開する意味を知る(今度やってみよう)