Skip to content

Instantly share code, notes, and snippets.

@wtsnjp
Last active December 7, 2025 05:02
Show Gist options
  • Select an option

  • Save wtsnjp/10737869cae4cee660be6dafb0386a07 to your computer and use it in GitHub Desktop.

Select an option

Save wtsnjp/10737869cae4cee660be6dafb0386a07 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
SRC=home.pdf
CROPPED=cropped.pdf
# Output sizes
SIZE_FAVICON_32=32
SIZE_FAVICON_192=192
SIZE_APPLE_TOUCH=180
##############################################################################
# STEP 0: Use Ghostscript to apply Preview.app's CropBox as the new MediaBox
##############################################################################
gs -o "$CROPPED" \
-sDEVICE=pdfwrite \
-dUseCropBox \
"$SRC"
##############################################################################
# STEP 1: Render PNGs using Poppler (pdftocairo)
##############################################################################
# 32px favicon → 白背景PNG → 白を透過に
pdftocairo -png -singlefile -scale-to $SIZE_FAVICON_32 "$CROPPED" tmp-32
magick tmp-32.png \
-alpha set -fuzz 2% -transparent white \
favicon-32.png
rm tmp-32.png
# 192px favicon → 同様に白を透過に
pdftocairo -png -singlefile -scale-to $SIZE_FAVICON_192 "$CROPPED" tmp-192
magick tmp-192.png \
-alpha set -fuzz 2% -transparent white \
favicon-192.png
rm tmp-192.png
# Apple Touch Icon (背景白のまま/非透過)
pdftocairo -png -singlefile -scale-to $SIZE_APPLE_TOUCH "$CROPPED" tmp-apple
magick tmp-apple.png \
-resize ${SIZE_APPLE_TOUCH}x${SIZE_APPLE_TOUCH} \
-background white -flatten \
apple-touch-icon.png
rm tmp-apple.png
##############################################################################
# STEP 2: Generate multi-resolution favicon.ico
##############################################################################
# ICO 用 PNG を生成(まずは白背景)
pdftocairo -png -singlefile -scale-to 16 "$CROPPED" tmp-16
pdftocairo -png -singlefile -scale-to 32 "$CROPPED" tmp-32ico
pdftocairo -png -singlefile -scale-to 48 "$CROPPED" tmp-48
pdftocairo -png -singlefile -scale-to 64 "$CROPPED" tmp-64
# それぞれ白を透過に変換
magick tmp-16.png -alpha set -fuzz 2% -transparent white tmp-16.png
magick tmp-32ico.png -alpha set -fuzz 2% -transparent white tmp-32ico.png
magick tmp-48.png -alpha set -fuzz 2% -transparent white tmp-48.png
magick tmp-64.png -alpha set -fuzz 2% -transparent white tmp-64.png
# ICO に統合(透過背景のまま)
magick tmp-16.png tmp-32ico.png tmp-48.png tmp-64.png favicon.ico
# Cleanup
rm "$CROPPED" tmp-16.png tmp-32ico.png tmp-48.png tmp-64.png
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment