View Single Post
Old 03-06-2011, 12:45 PM   #8
igormorgado
Reader
igormorgado began at the beginning.
 
igormorgado's Avatar
 
Posts: 23
Karma: 10
Join Date: Jan 2011
Device: Pocketbook 902
Damn.. and I just write a code to convert CBR/CBZ/ZIP/RAR comics to PDF

I can even batch mode on them with:
Code:
ls | while read comic; do cb2pdf "$comic"; done
here goes the code

Code:
#!/bin/bash

FILE="$@"
DEBUG="TRUE"
#DRY="echo"
TMPDIR=".tmp$RANDOM$RANDOM"
# Unconment to transform to PB
#PB902="yes"

function detect_source() {
	SOURCE="$@"
	
	if [ -d "$SOURCE" ]; then
		SOURCETYPE="dir"
	else
		EXTENSION="$( echo ${SOURCE##*.} | tr [:upper:] [:lower:] )"
		[ -n "$DEBUG" ] && echo "Extension --$EXTENSION--"
		case $EXTENSION in
			cbr|rar) SOURCETYPE="rar" ;;
			cbz|zip) SOURCETYPE="zip" ;;
		esac
	fi
	[ -n "$DEBUG" ] && echo Source detected "$SOURCETYPE"
}

function create_tmpdir() {

	mkdir -p $TMPDIR

}
function extract_rar() {
	RARFILE="$@"
	cd "$TMPDIR"
$DRY	unrar e ../"${RARFILE}"
}

function extract_zip() {
	ZIPFILE="$@"
	cd "$TMPDIR"
$DRY	unzip -j ../"${ZIPFILE}"
}

function mirror_dir() {
	ZIPFILE="$@"
	cp -rav "$FILE"* "$TMPDIR" 
	cd "$TMPDIR"
}


function convert_dir_to_tiff() {
	SOURCEDIR="$@"
	[ -n "$DEBUG" ] && echo "Converting dir ${SOURCEDIR}"
	for IMAGE in *; do
		IMGEXT="${IMAGE##*.}"
		if [ "$IMGEXT" != "jpg" -a "$IMGEXT" != "jpeg" -a "$IMGEXT" != "png" -a "$IMGEXT" != "tiff" -a "$IMGEXT" != "tif" ]; then
			[ -n "$DEBUG" ] && echo "... $IMAGE not a image file. Skipping..."
			continue
		fi

		[ -n "$DEBUG" ] && echo "... $IMAGE"
		$DRY convert "$IMAGE" "${IMAGE%.*}.tiff"
	done
}

convert_dir_to_pb902() {
	# Convert to right size and colorspace
	[ -n "$DEBUG" ] && echo "Converting to PocketBook Pro 902 "
	for IMAGE in *.tiff; do
		[ -n "$DEBUG" ] && echo "... $IMAGE"
		$DRY convert -colorspace Gray "$IMAGE"  "gray-${IMAGE%.*}"
		$DRY convert -colors 16 "gray-${IMAGE%.*}" "gr16-${IMAGE%.*}"
		rm "gray-${IMAGE%.*}"
		mv "gr16-${IMAGE%.*}" "$IMAGE"
	done
}

function create_mtiff_from_dir() {
	SOURCEDIR="$@"
	[ -n "$DEBUG" ] && echo "Creating MTIFF from ${SOURCEDIR}"
	[ -n "$DEBUG" ] && echo tiffcp *.tiff MULTI.tiff
	$DRY tiffcp *.tiff MULTI.tiff
}

function convert_mtiff_to_pdf() {
	SOURCEDIR="$@"
	[ -n "$DEBUG" ] && echo "Converting MTIFF to PDF on ${SOURCEDIR}"
	DESTINATIONFILE="${FILE%.*}.pdf"
	convert MULTI.tiff ../"$DESTINATIONFILE" 
}

function cleanup_tmp() {
	[ -n "$DEBUG" ] && echo "Cleaninup $TMPDIR"
$DRY	cd -
$DRY	rm -rf $TMPDIR
}

function show_files() {
	ls -lh "${FILE%.*}"*
}

function ajuda() {
cat << EOF
Under GNU/GPL v2 or grater. Distributed AS IS.

Usage: $0 [SOURCE]

Where source can be a dir containing images, a CBR or CBZ file.
EOF
exit 0
}

[ "$#" -ne 1 ] && ajuda

detect_source "$FILE"
create_tmpdir "$TMPDIR"

case $SOURCETYPE in
rar)
	extract_rar "$FILE"
	;;
zip)
	extract_zip "$FILE"
	;;
dir)
	mirror_dir "$FILE"
	;;
*)
	echo "Cannot detect source type. Leaving..."
	exit 0
	;;
esac

convert_dir_to_tiff "$FILE"
[ -n "$PB902" ] && convert_dir_to_pb902 "$FILE"
create_mtiff_from_dir "$FILE"
convert_mtiff_to_pdf "$FILE"
cleanup_tmp
show_files

Last edited by igormorgado; 03-06-2011 at 12:56 PM. Reason: Code fix...
igormorgado is offline   Reply With Quote