ZIPファイルを少しでも小さく圧縮させようとした話

f:id:rosone:20201113215354j:plain

はじめに

GmailでZIPファイルを添付する際、ファイルサイズ上限の25MBに引っかかってしまいました。

なんとかしてメールに添付したい!ということで少しでもファイルを小さく圧縮させる試行錯誤の末に、元サイズ26MBから24MBまで小さくすることが出来たので、そのテクニックを紹介しようと思います。

(ネタ色が強いので、本当に困っている方はファイル転送サービスやGoogle Driveの共有機能を利用することを推奨!)

1.Google DriveからZIPでエクスポートした直後

Google Drive上で管理していたファイル群をZIPでエクスポートしたところ、圧縮状態で26MB、解凍後は33.8MBで出力された。

f:id:rosone:20200929163940p:plain
Google DriveからZIPでエクスポート
f:id:rosone:20201113202510p:plain
解凍したフォルダ

ファイルの中身はざっくり下記の4種類で、それぞれの形式で複数ファイル存在している。

  • text
    • textデータは文字数を減らす以外に解決策はほぼないため、今回は対象外
    • (本気でやると圧縮アルゴリズムとかの話になってくる)
  • Excel
  • PDF(中身に画像有り)
  • PDF(中身に画像無し)

2.ZIP編

自分だけが扱うなら7zなどZIPより更に高圧縮の形式で保管するのだが、今回は他の人にZIP形式で届ける必要があった。 ZIPはZIPでも、最高圧縮率のZIPを生成してみると...

f:id:rosone:20201113202723p:plain
最高圧縮のZIP

25.6MBと0.4MBは小さくなったが、メール添付するにはまだ0.6MBオーバーしている。

ちなみに...7z形式で圧縮すると

f:id:rosone:20201113203245p:plain
7z

17MBまで小さくすることが可能です。

(7zすごい)

3.Excel

ZIPの圧縮率を変えても目標の25MBを達成できなかったので、そもそも圧縮させる前のファイルたちをダイエットできないか見つめ直してみる。まずはExcelから。

GoogleスプレットシートからExcelに変換すると、見えないゴミデータがセルに残っている気がして、データが入力されていない部分の行と列を削除してみた。

f:id:rosone:20201113210326p:plain
範囲選択して削除する

上記画像で不要な列を範囲選択して削除し、行も範囲選択して同様に削除をすると、効果があった。

f:id:rosone:20201113210442p:plain
ゴミデータ掃除後

なんと75KBから10KBへスリムアップ成功!ファイルサイズが1/7に!

元々のファイルサイズは大きいとは言えませんが、このようなファイルが多数格納されているので、それぞれをスリムアップして回ればチリツモとなります。(実際にはもっと大きいサイズのファイルもありました)

4.PDF編

PDFファイルのスリムアップ化について調べてみるといくつか方法が見つかった。

  • Acrobat Reader Pro DCを使う
    • 品質の劣化を抑えて圧縮出来るらしいとのことで使いたかったのだが、有料ライセンスを持っていないため断念
  • Macのプレビューから圧縮
    • Macで開発しているので今回はこちらを採用

プレビューでPDFを開き、[メニューバー -> ファイル -> 書き出す...] を押下。

f:id:rosone:20201113213302p:plain
Macプレビューの書き出し

保存画面で [Quartzフィルタ -> ファイルサイズを減らす] を選び、保存。

f:id:rosone:20201113213427p:plain
Macプレビューの圧縮保存

圧縮された状態で保存される。

f:id:rosone:20201113213656p:plain
PDFサイズ比較

画像ありは1.4MBから0.2MB、画像なしは0.4MBから0.2MBとなった。すごい!!

特に画像ありのPDFに大きい効果が見られたのだが...。

f:id:rosone:20201113214216p:plain
画像ありPDFの劣化具合

画像部分の劣化具合があまりにひどい。仕方ないのでPDF(中身に画像無し)だけ圧縮することにした。

Acrobat Reader Pro DCなら劣化具合や圧縮率はどんなもんなんでしょう。ご存じの方がいればぜひコメントで教えて下さい。

終わりに

本記事で紹介した様々なテクニックを駆使し、無事に24973KB(24.9MB)とGmailの添付サイズ上限ギリギリを突破することに成功!くぅ〜疲れました!!

f:id:rosone:20200929164410p:plain
試行錯誤の末に完成したZIPファイル

Gmailのサイズ上限は突破したものの...

送信先のメールサーバからサイズオーバーのエラーが戻ってきてしまい、血と涙の結晶(ZIP)をメールで届けることはできませんでした。

最終的にGoogle Driveの共有機能で解決しましたとさ。ちゃんちゃん。