🙆

Mac版Android Studioスクショ機能がtiffでしかコピーできない事象について

2023/10/11に公開

はじめに

結論として良い解決法はまだ見つかってないです
あくまで同じ事象に出会った方へのメモとして記しておきます

背景

Github PRにてアプリのスクショをコピペするのですが、なぜかSafariでしか表示されなかった画像があったので調査してみました

原因

Mac版 Android Studioのスクリーンショット機能を使ってCopy to Clipboardを押してコピーされた画像データのPNG, JPEG形式がすべてtiff形式(Safariのみ表示できる形式)になっており、ペーストしてもTIFFしかペーストされないため

tiffであることの検証

画像クリップボードの中身

画像クリップボード自体は一つの画像データではなく、複数の画像データを持ち合わせることが通例です(PNG,JPEG...etc)
また、詳細はわかりませんがMacではpngtiffのどちらかをペーストするのがデフォルトなようです

なのでまずはGithubにクリップボードからアップロードした画像データが何の画像形式なのかを確認してみます

画像形式の検証

正しいやり方ではないかもしれませんがIrfan Viewは画像形式を判別してくれるので、Githubにアップロードした読み込めない画像を再度ダウンロードして読み込んでみます

拡張子がpngですが画像形式はtifであるとの警告が表示されました(拡張子がpngである理由は後に判明)
また、tiff非対応のChrome, Firefoxでは表示されず、tiff対応のSafariでしか画像が表示されないことを考えるとGithubに表示された画像はtiffである可能性が高く、クリップボードからはtiffがペーストされたといえます

しかしここでMac標準のスクショではpngがアップロードされていることが発覚しました
そのため、macではtiffを優先してペーストするようではないようです
調べてみると、PNGがデフォルトでPNG形式がない場合はtiffになるようです(tiffはchrome,firefoxでは使えないので当たり前っちゃ当たり前)
https://apple.stackexchange.com/questions/312986/why-paste-from-screenshot-into-mail-will-save-as-tiff-format

そのため、クリップボードの中身を調べてみます

png時とtiff時の画像クリップボード比較

Macではコマンドosascript -e "clipboard info"でクリップボードの中身を調べることができるので比較してみます

png時(Mac標準スクショ機能)

まずは通常のMac標準スクショのクリップボード情報を見てみます

«class PNGf», 1740634,
«class 8BPS», 7116018,
GIF picture, 430535,
«class jp2 », 995093,
JPEG picture, 662647,
TIFF picture, 23762486,
«class BMP », 23756682,
«class TPIC», 4180476

PNG,JPG等の画像データがそれぞれ乗っかっており、そのサイズも一緒に載っています
圧縮系はサイズがある程度小さく、BMPなど非圧縮系は大きいことが見て取れます

tiff時(Android Stidioスクショ機能)

tiffになっていたCopy to Clipboardでコピーしたクリップボード情報を見てみます

«class PNGf», 10368850,
JPEG picture, 10368850,
TIFF picture, 10368850,
«class 8BPS», 510962,
GIF picture, 22444,
«class jp2 », 101181,
«class BMP », 10368138,
«class TPIC», 163963

多少順序が違うといえどPNGもちゃんと含まれていますが、注目してほしいのはサイズです
上からPNG,JPEG,TIFFとならんでいますが、通常時と違い全て同じサイズです
また、非圧縮であるTIFFと同じサイズであるためjpg,pngはTIFFである可能性が高いです

つまりは
クリップボードからはPNGをアップロードしていたが、中身はTIFFであるため表示されなかった
という可能性がかなり高いです

10/12追記
なんとなくは感じていましたが、上記の優先順にペーストされるようです
またどの拡張子を禁止するかどうかはアプリケーション側で決定するようです

追記:ブラウザ検証

ブラウザが原因でもあると思われたので検証してみました

ブラウザごとのペースト検証

Macでブラウザごとに画像ペーストしたときの表示有無とDLした画像の形式(Irfan View使用)を以下に載せます

ブラウザ 表示有無 ファイル形式
Chrome TIFF
Firefox TIFF
Safari 未検証

おそらくブラウザ関係なくTIFFでアップロードされている可能性があります

Android Studioが原因ではない?

ここまでの検証で通常の画像クリップボードではちゃんと画像形式がわかれているのにも関わらず、Android Studioでは上位三種が同一になっているためAndroid Studioが原因と思いますが調べてみると公式(Issue Tracker)からは否定されていました(won't fix扱い)

https://issuetracker.google.com/issues/243678697?pli=1

どうもAndroid StudioからはTIFFを一切提供しておらず、TIFF自体の問題など別の問題である可能性が高いとの認識のようです

まとめ

何の解決にもいたってませんが、Mac版Android Studioでのスクショコピペがうまく行かない原因はこんな感じだと思います
解決法は単純にスクショをpng保存してからアップロードになると思います(ファイルが増えるので面倒くさい…)

Android Studioが原因でないのならば類似問題をどこかで見つけられたら対策が見つかるかも知れませんが、未だ見つけられていません
どなたか良い解決法、または近い事象などがありましたら教えていただけると幸いです

Discussion