macOS上でGIMP 3.0系を使っていたところ、PNGファイルを開こうとすると突然クラッシュする現象に遭遇しました。
特定のPNGだけでなく、ほぼどのPNGでも同じです。エラーダイアログは出ず、macOSのクラッシュレポートだけが残ります。

「PNGが壊れているのか」「GIMP 3.0はまだ不安定なのか」と考えつつ、原因を一つずつ切り分けることにしました。
1. PNGそのものには問題はなさそう
まず疑ったのは、PNGファイル自体の問題です。
念のため、macOSのプレビューアプリで同じPNGを開いてみましたが、問題なく表示できます。
また、sips コマンドでPNGを再エンコードしても、GIMPでは同じようにクラッシュしました。
この時点で「PNGデータそのものが原因ではなさそうだ」と考えました。
1.1. クラッシュログを確認する
次に、macOSが生成したクラッシュログを詳しく読みました。
例外は EXC_BAD_ACCESS (SIGBUS)。
不正なメモリアクセスです。
注目したのは、クラッシュしたスレッドが Thread 6 (async) だった点でした。
さらにスタックトレースを見ると、GEGL や babl といった、GIMP内部の画像処理ライブラリが並んでいます。
Thread 6 Crashed:: async
0 libsystem_pthread.dylib 0x7ff805e4faff 0x7ff805e4e000 + 6911
1 libbabl-0.1.0.dylib 0x101885400 babl_fish_path_process + 179 (babl-fish-path.c:1332)
2 libbabl-0.1.0.dylib 0x10188683c babl_process_rows + 180 (babl-fish-path.c:1451)
3 libgegl-0.4.0.dylib 0x1017a41f2 gegl_downscale_2x2_generic2 + 326 (gegl-algorithms.c:1168)
4 libgegl-0.4.0.dylib 0x1017b56f6 gegl_buffer_read_at_level + 465 (gegl-buffer-access.c:1730)
5 libgegl-0.4.0.dylib 0x1017b562e gegl_buffer_read_at_level + 265 (gegl-buffer-access.c:1713)
6 libgegl-0.4.0.dylib 0x1017b562e gegl_buffer_read_at_level + 265 (gegl-buffer-access.c:1713)
7 libgegl-0.4.0.dylib 0x1017b562e gegl_buffer_read_at_level + 265 (gegl-buffer-access.c:1713)
8 libgegl-0.4.0.dylib 0x1017b562e gegl_buffer_read_at_level + 265 (gegl-buffer-access.c:1713)
9 libgegl-0.4.0.dylib 0x1017b53d6 gegl_buffer_iterate_read_fringed + 301 (gegl-buffer-access.c:1779)
10 libgegl-0.4.0.dylib 0x1017b3df0 gegl_buffer_iterate_read_abyss_clamp + 34 (gegl-buffer-access.c:1459) [inlined]
11 libgegl-0.4.0.dylib 0x1017b3df0 gegl_buffer_iterate_read_dispatch + 1268 (gegl-buffer-access.c:1903)
12 libgegl-0.4.0.dylib 0x1017b0d42 _gegl_buffer_get_unlocked + 2334 (gegl-buffer-access.c:2244)
13 gimp 0x10025f085 gimp_drawable_get_sub_preview_async_func + 355 (gimpdrawable-preview.c:391)
14 gimp 0x10021f0ea gimp_parallel_run_async_execute_task(GimpParallelRunAsyncTask*) + 41 (gimp-parallel.cc:463)
15 gimp 0x10021f269 gimp_parallel_run_async_thread_func(GimpParallelRunAsyncThread*) + 94 (gimp-parallel.cc:357)
16 libglib-2.0.0.dylib 0x10169bd8e g_thread_proxy + 66 (gthread.c:831)
17 libsystem_pthread.dylib 0x7ff805e5411f 0x7ff805e4e000 + 24863
18 libsystem_pthread.dylib 0x7ff805e4fac3 0x7ff805e4e000 + 6851Code language: CSS (css)
1.2. GEGLとbabl
GIMPでは、GEGLが画像処理の流れを管理し、その途中で必要な色変換をbablが担当します。
- GEGL(Generic Graphics Library)は、
GIMP内部で使われている画像処理用のエンジンです。
画像の拡大・縮小、ぼかし、合成などの処理を、処理手順のパイプラインとして実行します。 - babl(Because a pixel is not a pixel)は、
ピクセルの色形式や色空間を変換するためのライブラリです。
たとえば「RGBAの8bit画像を別の色空間に変換する」といった役割を担います。
2. プレビュー生成が怪しいと考えた理由
ここで重要なのは、画像を「開く」処理ではなく、「プレビューを作る」処理が非同期で動いていた ことです。
スタックトレースには、次のような流れが見えました。
- 画像の一部を取得する処理
- 縮小(ダウンスケール)処理
- 色変換処理
これらは、キャンバス表示というより、サムネイルやプレビュー画像を作るとき に使われる処理です。
「もしかして、PNGを選択した瞬間に走るプレビュー生成で落ちているのでは?」
そう考えるようになりました。
2.1. ユーザーインターフェースのプレビュー設定をオフにする
そこで、GIMPの設定を実際に操作しながら確認することにしました。
目を向けたのが、ユーザーインターフェースのプレビュー設定 です。
この設定を変更した直後、PNGを開いても クラッシュしなくなりました。

- GIMPのメニューから「編集 → 設定」を開く
- 左側で「ユーザーインターフェース」を選ぶ
- 「プレビュー」関連の設定を確認
- レイヤーやチャンネルのプレビュー表示をオフにする
3. なぜこれで直ったのか(考察)
今回のクラッシュは、PNGを読み込む処理そのものではありませんでした。
PNGを選択したときに走る 非同期のプレビュー生成処理 が原因だったと考えています。
プレビューは、画像を縮小し、色変換し、表示用の小さな画像を作ります。
この処理がGEGLとbablを経由して深く呼び出され、結果としてスタックが壊れ、クラッシュしていたようです。
プレビューをオフにすると、その経路自体が実行されません。
そのため、問題が表に出なくなりました。
3.1. 限界と注意点
今回の方法は「根本的な修正」ではありません。
GIMP側の不具合を、設定で回避しているだけです。
また、プレビューをオフにすると、レイヤー一覧などが少し見づらくなります。
利便性と安定性のトレードオフはあります。
それでも、作業中に突然落ちるよりは、ずっと実用的です。
4. 設定が原因のクラッシュもある
今回の件で感じたのは、「ファイル形式の問題」に見えても、実際は UIやプレビュー処理が原因 というケースがあることです。
同じようにGIMP 3.0系でPNGクラッシュに悩んでいる方がいたら、
まずプレビュー設定を疑ってみる価値はあります。