スマートフォンで撮った写真をブログに乗せるときに使うコマンドのメモと、それに関連して調べたこと。
まとめ
ImageMagick の convert コマンド一発でファイル形式の変換、リサイズ、EXIF情報の削除までできる。
convert -strip -resize 680x680 input.heic output.webp
必要なパッケージ
自分が記事を書くのに使っている ArchLinux の場合 convert コマンドは以下の通り imagemagick
パッケージに含まれているので適宜インストールする。
~/Downloads
❯ which convert
/usr/bin/convert
~/Downloads
❯ yay -Fy
:: Synchronizing package databases...
core is up to date
extra is up to date
community is up to date
~/Downloads
❯ yay -Fx '/usr/bin/convert$'
usr/bin/convert is owned by extra/imagemagick 7.1.0.48-2
~/Downloads took 5s
❯
コマンドについての捕捉
冒頭のまとめの通りではあるが、実際に変換に使うコマンドとしては以下のような感じにした。
convert -strip -resize 680x680 input.heic output.webp
オプション、引数については以下
オプション/引数 | 説明 |
---|---|
-strip | EXIF 情報の削除 |
-resize 680x680 | 変換後の画像の解像度、この場合は縦横比を維持しつつ 680x680 に収まるサイズに変換する |
input.heic | 入力ファイル名 |
output.webp | 出力ファイル名、ファイル名の拡張子を読んでそのファイル形式に変換してくれる |
それぞれのパラメータについてもう少し補足していく。
画像のファイル形式について
まず自分は写真を撮るとき iPhone (13 mini) を使っているが、カメラアプリの設定を弄っていなければ HEIF(High Efficiency Image File Format) という形式になる。
HEIF 形式と言いつつ拡張子は .heic だが、そこはあまり気にしなくて良さそう
HEICとHEIFの違いは何ですか?
HEIFは標準規格(High Efficiency Image Format)の名称であり、HEICはAppleが定めた拡張子の名称です。どちらもHEVC(High Efficiency Video Compression、別名H.265)規格がベースで、基本的に両者は置き替え可能です。
で、HEIF 形式はWebブラウザでの対応状況があんまり良くないので、 ブログに載せるならWebブラウザで表示できる別のファイル形式に変換する必要がある。
具体的に何の形式にするのが良いかについてだが、 軽く調べた感じ写真のように色数の多い画像は基本的に JPEG 使うのが良いらしい、 ということだったので最初は JPEG を使うことを考えていた。
ただ、この記事を書きながら調べてる途中で WebP 形式が良さそうという事で WebP を使う方針にした。
- 単純に JPEG/PNG よりも同じくらいの画質での圧縮率が高そう
- 自分が今使っている ImageMagick のバージョンで標準対応してるので、特に追加の手間も無い
- ブラウザの対応状況としても最近のモノなら概ね対応してそう
注意点としてはWebブラウザ以外での対応状況がまだぼちぼちな感じ様で、 Windows の標準ビューアで扱うにはコーデックスをインストールしたり一手間要るっぽい。 (自分が使っている Ristretto というビューアも標準では対応してなかった)
(今の所予定は無いが)絵を書いてアップしたり、コラ画像作ったり、ダウンロードして使われるのがある程度想定される画像に関しては、 JPEG/PNG なり別の形式を使う方が無難なのかもしれない。
EXIF 情報の削除について
スマートフォンにしろカメラにしろ写真を撮ると EXIF 情報として位置情報含め色々付加されるが、住所等何かしらバレても困るので消す。
位置情報に関して言えばスマートフォン側の設定で付与しないようにもできるが、 何となくオリジナルのファイルでは持たせて置きたかったので、そこの設定は弄らずブログ用に変換するタイミングで消す事にした。
あと、当然ではあるが EXIF 情報の削除については単純に情報量が減るのでファイルサイズが小さくなるメリットもある。 正直画像本体のデータ量に比べたら EXIF 情報のデータ量なんて微々たるものだろうと思っていたが、 一応リサイズ後のファイルで確認してみると思ってたよりは大きかった。 (3KiB ではあるが画像部分のサイズが思ったよりも小さくなったので、割合としては意外と大きかった)
~/Downloads
❯ convert -strip -resize 680x680 original.heic strip.webp
~/Downloads
❯ convert -resize 680x680 original.heic unstrip.webp
~/Downloads
❯ ls -lk *strip.webp
-rw-r--r-- 1 shida shida 54856 Sep 24 22:33 strip.webp
-rw-r--r-- 1 shida shida 58056 Sep 24 22:33 unstrip.webp
~/Downloads
❯
写真に付与される EXIF 情報について
記事の本旨からは少しずれるが、 iPhone で撮った写真の EXIF 情報を眺めてみる。 参考写真としては 2022/09/23 に池袋で撮ったこんな感じのモノ。(画像は圧縮済)
変換前ファイルの EXIF 確認 (長いので折りたたみ)
~/Downloads
❯ exiftool IMG_1207.heic
ExifTool Version Number : 12.42
File Name : IMG_1207.heic
Directory : .
File Size : 1968 kB
File Modification Date/Time : 2022:09:23 19:03:58+09:00
File Access Date/Time : 2022:09:24 20:41:01+09:00
File Inode Change Date/Time : 2022:09:24 20:41:01+09:00
File Permissions : -rwxrwxrwx
File Type : HEIC
File Type Extension : heic
MIME Type : image/heic
Major Brand : High Efficiency Image Format HEVC still image (.HEIC)
Minor Version : 0.0.0
Compatible Brands : mif1, MiHE, MiPr, miaf, MiHB, heic
Handler Type : Picture
Primary Item Reference : 49
Meta Image Size : 4032x3024
XMP Toolkit : XMP Core 6.0.0
HDR Gain Map Version : 65536
Exif Byte Order : Big-endian (Motorola, MM)
Make : Apple
Camera Model Name : iPhone 13 mini
Orientation : Horizontal (normal)
X Resolution : 72
Y Resolution : 72
Resolution Unit : inches
Software : 16.0
Modify Date : 2022:09:23 19:03:59
Host Computer : iPhone 13 mini
Exposure Time : 1/33
F Number : 1.6
Exposure Program : Program AE
ISO : 500
Exif Version : 0232
Date/Time Original : 2022:09:23 19:03:59
Create Date : 2022:09:23 19:03:59
Offset Time : +09:00
Offset Time Original : +09:00
Offset Time Digitized : +09:00
Shutter Speed Value : 1/33
Aperture Value : 1.6
Brightness Value : -0.9632028284
Exposure Compensation : -0.043
Metering Mode : Multi-segment
Flash : Off, Did not fire
Focal Length : 5.1 mm
Subject Area : 2007 1505 2213 1324
Run Time Flags : Valid
Run Time Value : 55586484792541
Run Time Scale : 1000000000
Run Time Epoch : 0
Acceleration Vector : -0.9918134222 -0.001812204602 0.1684726775
Warning : [minor] Bad format (16) for MakerNotes entry 14
Sub Sec Time Original : 562
Sub Sec Time Digitized : 562
Color Space : Uncalibrated
Exif Image Width : 4032
Exif Image Height : 3024
Sensing Method : One-chip color area
Scene Type : Directly photographed
Exposure Mode : Auto
White Balance : Auto
Focal Length In 35mm Format : 26 mm
Lens Info : 1.539999962-5.1mm f/1.6-2.4
Lens Make : Apple
Lens Model : iPhone 13 mini back dual wide camera 5.1mm f/1.6
Composite Image : Composite Image Captured While Shooting
Composite Image Count : 10 0
Composite Image Exposure Times : 0 0.6 0 1/8 0 1/33 0 0
GPS Latitude Ref : North
GPS Longitude Ref : East
GPS Altitude Ref : Above Sea Level
GPS Speed Ref : km/h
GPS Speed : 0
GPS Img Direction Ref : True North
GPS Img Direction : 248.2390901
GPS Dest Bearing Ref : True North
GPS Dest Bearing : 248.2390901
GPS Date Stamp : 2022:09:23
GPS Horizontal Positioning Error: 14.24648401 m
Profile CMM Type : Apple Computer Inc.
Profile Version : 4.0.0
Profile Class : Display Device Profile
Color Space Data : RGB
Profile Connection Space : XYZ
Profile Date Time : 2022:01:01 00:00:00
Profile File Signature : acsp
Primary Platform : Apple Computer Inc.
CMM Flags : Not Embedded, Independent
Device Manufacturer : Apple Computer Inc.
Device Model :
Device Attributes : Reflective, Glossy, Positive, Color
Rendering Intent : Perceptual
Connection Space Illuminant : 0.9642 1 0.82491
Profile Creator : Apple Computer Inc.
Profile ID : ecfda38e388547c36db4bd4f7ada182f
Profile Description : Display P3
Profile Copyright : Copyright Apple Inc., 2022
Media White Point : 0.96419 1 0.82489
Red Matrix Column : 0.51512 0.2412 -0.00105
Green Matrix Column : 0.29198 0.69225 0.04189
Blue Matrix Column : 0.1571 0.06657 0.78407
Red Tone Reproduction Curve : (Binary data 32 bytes, use -b option to extract)
Chromatic Adaptation : 1.04788 0.02292 -0.0502 0.02959 0.99048 -0.01706 -0.00923 0.01508 0.75168
Blue Tone Reproduction Curve : (Binary data 32 bytes, use -b option to extract)
Green Tone Reproduction Curve : (Binary data 32 bytes, use -b option to extract)
HEVC Configuration Version : 1
General Profile Space : Conforming
General Tier Flag : Main Tier
General Profile IDC : Main Still Picture
Gen Profile Compatibility Flags : Main Still Picture, Main 10, Main
Constraint Indicator Flags : 176 0 0 0 0 0
General Level IDC : 90 (level 3.0)
Min Spatial Segmentation IDC : 0
Parallelism Type : 0
Chroma Format : 4:2:0
Bit Depth Luma : 8
Bit Depth Chroma : 8
Average Frame Rate : 0
Constant Frame Rate : Unknown
Num Temporal Layers : 1
Temporal ID Nested : No
Image Width : 4032
Image Height : 3024
Image Spatial Extent : 4032x3024
Rotation : 0
Image Pixel Depth : 8
Auxiliary Image Type : urn:com:apple:photo:2020:aux:hdrgainmap
Media Data Size : 1963768
Media Data Offset : 4686
Run Time Since Power Up : 15:26:26
Aperture : 1.6
Image Size : 4032x3024
Megapixels : 12.2
Scale Factor To 35 mm Equivalent: 5.1
Shutter Speed : 1/33
Create Date : 2022:09:23 19:03:59.562+09:00
Date/Time Original : 2022:09:23 19:03:59.562+09:00
Modify Date : 2022:09:23 19:03:59+09:00
GPS Altitude : 35.3 m Above Sea Level
GPS Latitude : 35 deg 43' 49.47" N
GPS Longitude : 139 deg 42' 33.33" E
Circle Of Confusion : 0.006 mm
Field Of View : 69.4 deg
Focal Length : 5.1 mm (35 mm equivalent: 26.0 mm)
GPS Position : 35 deg 43' 49.47" N, 139 deg 42' 33.33" E
Hyperfocal Distance : 2.76 m
Light Value : 4.1
Lens ID : iPhone 13 mini back dual wide camera 5.1mm f/1.6
~/Downloads
❯
一通り眺めてみた感じ位置情報以外は見えて困るものはなさそう。(iPhone の名前はどっかに入ってると思っていたが入ってなさそう)
- GPS Altitude
- GPS Latitude
- GPS Longitude
- GPS Position
強いて言えば写真に写っているもの次第では撮影日時の情報が気になるかもしれない
- Modify Date
- Date/Time Original
- Create Date
あとカメラには詳しくないので全部は理解出来てないが、 EXIF 情報として付与されるってスゴイ色々あるんだなというのを認識した。
一応ブログに載せる様に変換( convert -strip 〜
)した後のものも眺めてみる。
変換後ファイルの EXIF (一応これも折りたたみ)
~/Downloads
❯ exiftool image1.webp
ExifTool Version Number : 12.42
File Name : image1.webp
Directory : .
File Size : 55 kB
File Modification Date/Time : 2022:09:24 22:40:12+09:00
File Access Date/Time : 2022:09:24 22:40:12+09:00
File Inode Change Date/Time : 2022:09:24 22:40:12+09:00
File Permissions : -rw-r--r--
File Type : WEBP
File Type Extension : webp
MIME Type : image/webp
VP8 Version : 0 (bicubic reconstruction, normal loop)
Image Width : 680
Horizontal Scale : 0
Image Height : 510
Vertical Scale : 0
Image Size : 680x510
Megapixels : 0.347
~/Downloads
❯
折りたたまなくても良かったかもしれない
だいぶスッキリした。
画像解像度について
4032x3024 の解像度で見たくなるような写真を載せる予定も撮る予定も無いので、画像の解像度も適当に縮小する。
どのくらいの解像度にするかについてだが、単純にブログの今の記事エリアの横幅が約680pxなので、 基本的には 680x680 に収まるくらいで縮小する様にした。
今はトリミングとか加工したりもせず撮ったものをそのまま縮小して載せているが、PCの画面キャプチャだったり細長い画像だったりが出てきたら適宜調整することになりそうな気はする。
また、そのうち画像の拡大ホップアップ(lightbox ?)とかは仕込みたいとは思っているので、そうなったら改めて考えるつもりでいる。
あとがき
記事にまとめるために色々調べていると都度新しい知見があり、迷走しつつ記事を書いている。
- 最初は heif-convert, convert, exiftool の3コマンドで最終的に JPEG を使うつもりで記事を書いていた
- 記事としてまとめる中で convert コマンド一発でできることが分かり、記事の構成を変更して書き直し
- 画像フォーマットとして WebP を認識して、良さそうだったのでその形式を使う方向でまた修正
- guetzli を使うのが良いんじゃないか? ← イマココ
新しい知見それ自体に関しては、記事としてまとめる事で気付けた(アウトプットする事で得られた)メリットと考えても良いかなとは思っている。 下調べが足りないという説もあるが、記事として書き始めた時点でブログに載せる用の画像を変換するという目的自体は達成していたので、 その時点で追加で調べるという考えにならなかったのは仕方ないかなという感じ。
ただ、毎回この調子で書き直しになるのはしんどいし、記事が完成しなくて途中で放置することにも繋がりそうなので、 適当なタイミングで記事としてあげてしまうとかのバランスは少し考えても良いんだろうな、とも思った。
guetzli に関しては追々調べてみることにして今回は諦め。
各ファイル形式の比較もそのうち改めて調べてまとめてみようと思う。