howtophil icon

Slice Comics (CBZ,CBR,PDF) for Sony PRS-300

howtophil | PRO | 02/01/22 03:59:49 AM UTC (Edited) | 0 ⭐ | 1984 👁️ | Never ⏰ | []
Bash |

2.86 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
#-----------------------------------------
#
# ./slicecomic.sh "FILENAME"
#
# This is a bash script I wrote to make
# reading comics on my PRS-300 easier.
# Since the zoom on the PRS-300 does 
# not scroll, I slice the pages into
# 4-parts that are each "screen-sized"
# effectively giving me a 4x zoom.
# Before each set of 4 zoomed images,
# I put in a downscaled full-page
# so I can see the flow before I zoom
# in to read the page.
# Not perfect but I can enjoy a comic
# on my e-reader fairly well this way.
# Obviously in grayscale ;)
#
# Currently full of kludges but
# it works for me. I might polish it
# at some future date. 2022-01-31
#
# Removed a kludge or two on 2022-01-31
# later in the day
#
#------------------------------------------
 
# First, we unzip the cbz
# or unrar the cbr
# or convert the pdf
# Brute-forcing try of all 3
# one should work and the other two should fail
# ignore the error messages. It'll keep
# plugging along.
echo "Extracting the images from the file..."
unzip -j "$1" 2> /dev/null
unrar e -ai "$1" 2> /dev/null
convert -density 300 -trim "$1" -quality 100 tile%04d.jpg 2> /dev/null
 
ls *jpg| cat -n | while read n f; do mv "$f" `printf "tile%04d.jpg" $(($n-1))`; done
 
# Get the basename (without path) for later
fname=$(basename "$1")
 
# The PRS-300 has 600x800 screen
# Setting the height to 1600 seems
# to net me a one-page-to-4-tiles
# result, but you may need/want
# to adjust for your situation
echo "Resizing the pages"
mogrify -resize 1200x1600 *.jpg
echo "Padding any short sided pages"
mogrify -extent 1200x1600 -gravity Center -fill white *.jpg
 
#Greyscale because the e-ink is greyscale
echo "Converting to grayscale because e-ink"
mogrify -colorspace gray *.jpg
 
# Make a temp tiles directory
# and slice the comic images into
# tiles in it.
echo "Slicing out the tiles"
mkdir tiles
convert *.jpg +repage -crop 600x800 ./tiles/tile%04d.jpg
 
# Append a "b" into each filename
# to allow easier "full page view"
# integration. (see below)
cd ./tiles
rename 's/\.jpg$/b\.jpg/' *jpg
cd ../
 
# Shove full pages into every 4th position
# This lets you look at the whole
# page for reference of how it
# flows before looking at the
# zoomed in sections.
# Convert to screen size first
mogrify -resize 600x800 *.jpg
fcount=0
for filename in ./*.jpg
do
    fmovename=$(printf "tile%04d" "$fcount")
    echo $fmovename.jpg
    cp $filename ./tiles/$fmovename.jpg
    fcount=$((fcount+4))
done
 
# Zip the tiles into a cbz with a similar
# name to the original
zip -j "Sliced-$fname.cbz" ./tiles/*.jpg
 
# Clean up the images
rm -Rf tiles
rm *.jpg
 
# ebook-convert to LRF
# which I find is smooth on my 
# Sony PRS-300
ebook-convert "Sliced-$fname.cbz" "Sliced-$fname.lrf"
 
# remove the cbz (or comment this out to keep it)
# after the lrf is made.
rm "Sliced-$fname.cbz"
 

Comments