diff options
author | James Bottomley <JBottomley@Parallels.com> | 2014-07-24 16:38:20 -0700 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2020-12-06 11:37:10 -0800 |
commit | 75be4bf6a801db800e45fdce3ef3b977f3c7913c (patch) | |
tree | 0203f8a5f601beb414dea04764ec92ed1d0a6d7a | |
parent | 0678958330ae757a9fc0532f7bedb5762683a100 (diff) | |
download | ricoh-sp100-75be4bf6a801db800e45fdce3ef3b977f3c7913c.tar.gz |
pstoricohddst-gdi: Implement dot counts
The printers need the dotcounts per page to estimate toner use, so implement
this using the ImageMagick identify command. One of the fx variables is the
mean, which is the average colour of the image. For b/w images, this
represents the number of white pixels divided by size. Thus the black dot
count is width*height*(1-mean).
Tidy up some of the repeated elements in the script so this calculation is
only in one place for ease of maintenance.
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
-rwxr-xr-x | pstoricohddst-gdi | 159 |
1 files changed, 67 insertions, 92 deletions
diff --git a/pstoricohddst-gdi b/pstoricohddst-gdi index f86f9b6..9db3b13 100755 --- a/pstoricohddst-gdi +++ b/pstoricohddst-gdi @@ -23,6 +23,66 @@ function stop() { echo "stop" > $uid/999999999-page.pbm } +function output_page() { + # Converting page to JBIG format (parameters are very special for this printer!) + pbmtojbg -p 72 -o 3 -m 0 -q < $page > $uid/raster.jbig + + # Taking image size + jsize=`wc -c < $uid/raster.jbig` + + # Taking image dimensions + x=($(identify -format "%w %h %[fx:mean] " $page)) + ## + # The %[fx:mean] gives the average colour in the image which for + # monochrome is the number of white pixels divided by the size + # + # So the formula gives the number of black pixels. The final + # /1 causes bc to round to the nearest integer because scale=0 + ## + dots=$(echo "(${x[0]}*${x[1]}*(1-${x[2]}))/1"|bc) + + # Flushing page header + cat <<EOF +@PJL SET PAGESTATUS=START$e +@PJL SET COPIES=1$e +@PJL SET MEDIASOURCE=$mediasource$e +@PJL SET MEDIATYPE=PLAINRECYCLE$e +@PJL SET PAPER=$pagesize$e +@PJL SET PAPERWIDTH=${x[0]}$e +@PJL SET PAPERLENGTH=${x[1]}$e +@PJL SET RESOLUTION=${resolution%x600}$e +@PJL SET IMAGELEN=$jsize$e +EOF + + cat $uid/raster.jbig + + # Flushing page footer + # TODO: pixelcount for toner estimate + cat <<EOF +@PJL SET DOTCOUNT=$dots$e +@PJL SET PAGESTATUS=END$e +EOF +} + +function output_header() { + cat <<EOF +%-12345X@PJL$e +@PJL SET TIMESTAMP=$ddate$e +@PJL SET FILENAME=Document$e +@PJL SET COMPRESS=JBIG$e +@PJL SET USERNAME=$user$e +@PJL SET COVER=OFF$e +@PJL SET HOLD=OFF$e +EOF +} + +function output_footer() { + cat <<EOF +@PJL EOJ$e +%-12345X +EOF +} + log "Called with cmdline: $0 $*" trap "stop; trapINT" SIGINT SIGTERM SIGQUIT @@ -73,60 +133,19 @@ mkdir -p $uid log "Page submitted" [ "$stage" = "empty" ] && { log "1st stage. Flushing PJL header" - cat <<EOF -%-12345X@PJL$e -@PJL SET TIMESTAMP=$ddate$e -@PJL SET FILENAME=Document$e -@PJL SET COMPRESS=JBIG$e -@PJL SET USERNAME=$user$e -@PJL SET COVER=OFF$e -@PJL SET HOLD=OFF$e -EOF - + output_header stage="printing" } [ "$page" = "999999999-page.pbm" ] && { log "Last stage. Flushing PJL footer" - cat <<EOF -@PJL EOJ$e -%-12345X -EOF + output_footer pid=`ps ax | grep $uid | grep -v grep | awk ' { print $1 } '` [ ! "x$pid" = "x" ] && kill $pid break } [ "$stage" = "printing" ] && { - # Converting page to JBIG format (parameters are very special for this printer!) - pbmtojbg -p 72 -o 3 -m 0 -q < $uid/$page > $uid/raster.jbig - - # Taking image size - jsize=`wc -c < $uid/raster.jbig` - - # Taking image dimensions - read fn ft xs ys garb < <(identify $uid/$page | tr "x" " ") - - # Flushing page header - cat <<EOF -@PJL SET PAGESTATUS=START$e -@PJL SET COPIES=1$e -@PJL SET MEDIASOURCE=$mediasource$e -@PJL SET MEDIATYPE=PLAINRECYCLE$e -@PJL SET PAPER=$pagesize$e -@PJL SET PAPERWIDTH=$xs$e -@PJL SET PAPERLENGTH=$ys$e -@PJL SET RESOLUTION=${resolution%x600}$e -@PJL SET IMAGELEN=$jsize$e -EOF - - log "Flushing image $page" - cat $uid/raster.jbig - - # Flushing page footer - # TODO: pixelcount for toner estimate - cat <<EOF -@PJL SET DOTCOUNT=1132782$e -@PJL SET PAGESTATUS=END$e -EOF + page=$uid/$page + output_page } done ) & @@ -147,58 +166,14 @@ EOF gs -sDEVICE=ps2write -sOutputFile=- -r$resolution -dQUIET -dBATCH -dNOPAUSE - | gs -sDEVICE=pbmraw -sOutputFile=${uid}/%03d-page.pbm -r$resolution -dQUIET -dBATCH -dNOPAUSE - log "Conversion complete" - cat <<EOF -%-12345X@PJL$e -@PJL SET TIMESTAMP=$ddate$e -@PJL SET FILENAME=Document$e -@PJL SET COMPRESS=JBIG$e -@PJL SET USERNAME=$user$e -@PJL SET COVER=OFF$e -@PJL SET HOLD=OFF$e -EOF + output_header for page in ${uid}/*-page.pbm; do - - log "Page $page" - # Converting page to JBIG format (parameters are very special for this printer!) - pbmtojbg -p 72 -o 3 -m 0 -q < $page > $uid/raster.jbig - - # Taking image size - jsize=`wc -c < $uid/raster.jbig` - - # Taking image dimensions - read fn ft xs ys garb < <(identify $page | tr "x" " ") - log "Identified as ${xs}x${ys}" - - # Flushing page header - cat <<EOF -@PJL SET PAGESTATUS=START$e -@PJL SET COPIES=1$e -@PJL SET MEDIASOURCE=$mediasource$e -@PJL SET MEDIATYPE=PLAINRECYCLE$e -@PJL SET PAPER=$pagesize$e -@PJL SET PAPERWIDTH=$xs$e -@PJL SET PAPERLENGTH=$ys$e -@PJL SET RESOLUTION=${resolution%x600}$e -@PJL SET IMAGELEN=$jsize$e -EOF - - # Flushing image - cat $uid/raster.jbig - - # Flushing page footer - # TODO: pixelcount for toner estimate - cat <<EOF -@PJL SET DOTCOUNT=1132782$e -@PJL SET PAGESTATUS=END$e -EOF + output_page done # Flushing PJL footer - cat <<EOF -@PJL EOJ$e -%-12345X -EOF + output_footer } |