Ok, good, I made sprintf its own statement and dropped the printf altogether. I think the common advice is to use printf only when you have to. I get partial results from this now. It does resize the jpgs but I think it has problems with spaces in the names of files, which doesn't sound unusual on a command line. First, the subroutine:

sub resize_images { use 5.010; use Path::Class; use Image::Magick; my ($rvars) = shift; my %vars = %$rvars; $vars{"target"}= 100; $vars{"bias"}= 2; $vars{"helpscript"}= "helper1.sh"; my $file2 = $vars{"helpscript"}; my $path = $vars{"to_images"}; open( my $fh, ">", $file2 ) or die("Can't open $file2 for writing: $!"); my $cd = "cd $path \n"; print $fh $cd; my $ls1 = "ls -lht >>text1.txt\n"; print $fh $ls1; opendir my $hh, $path or warn "warn $!\n"; while (defined ($_ = readdir($hh))){ my $image = Image::Magick->new; my $file = file($path,$_); $image->ReadImage($file); $x = $image->Get('filesize'); my $k = $x/1024; say "$file has filesize of $x bytes or $k k"; if ($k>$vars{"target"}){ say "file is $file"; my $ratio = $k/($vars{"target"}-$vars{"bias"}); say "ratio is $ratio"; my $percent = 100/$ratio; say "percent is $percent"; my $trim= sprintf("%3.2f", $percent); say "default is $_"; my $mogrify = "mogrify -resize $trim% $file\n"; print $fh $mogrify; } } my $ls2 = "ls -lht >>text2.txt\n"; print $fh $ls2; close $fh; ## system call my $system = 'bash helper1.sh'; my $return = system( $system ); return $return; }

The output was hard for me to believe, but I don't think my computer is lying to me. html output The thing that jumps out is how a jpg of size 853 becomes 17k after a resize that should have landed it at 98k. But it's definitely a washed-out image. This is what the ls commands and the helper script look like:

$ pwd /home/fred/Desktop/root3/pages/baylor/template_stuff/aimages $ cat text1.txt total 1.6M -rw-rw-r-- 1 fred fred 0 Sep 27 17:17 text1.txt -rw-rw-r-- 1 fred fred 232K Sep 27 17:14 yjj.jpg -rw-rw-r-- 1 fred fred 853K Sep 27 17:14 zbears.jpg -rw-rw-r-- 1 fred fred 80K Sep 27 17:14 Screenshot from 2014-08-21 13 +:22:42.png -rw-rw-r-- 1 fred fred 163K Sep 27 17:14 Screenshot from 2014-09-25 17 +:14:08.png -rw-rw-r-- 1 fred fred 245K Sep 27 17:14 Screenshot from 2014-08-21 13 +:10:18.png $ cat text2.txt total 568K -rw-rw-r-- 1 fred fred 0 Sep 27 17:17 text2.txt -rw-rw-r-- 1 fred fred 50K Sep 27 17:17 yjj.jpg -rw-rw-r-- 1 fred fred 17K Sep 27 17:17 zbears.jpg -rw-rw-r-- 1 fred fred 406 Sep 27 17:17 text1.txt -rw-rw-r-- 1 fred fred 80K Sep 27 17:14 Screenshot from 2014-08-21 13 +:22:42.png -rw-rw-r-- 1 fred fred 163K Sep 27 17:14 Screenshot from 2014-09-25 17 +:14:08.png -rw-rw-r-- 1 fred fred 245K Sep 27 17:14 Screenshot from 2014-08-21 13 +:10:18.png $ cd .. $ cd .. $ cat helper1.sh cd /home/fred/Desktop/root3/pages/baylor/template_stuff/aimages ls -lht >>text1.txt mogrify -resize 40.04% /home/fred/Desktop/root3/pages/baylor/template_ +stuff/aimages/Screenshot from 2014-08-21 13:10:18.png mogrify -resize 60.40% /home/fred/Desktop/root3/pages/baylor/template_ +stuff/aimages/Screenshot from 2014-09-25 17:14:08.png mogrify -resize 11.50% /home/fred/Desktop/root3/pages/baylor/template_ +stuff/aimages/zbears.jpg mogrify -resize 42.31% /home/fred/Desktop/root3/pages/baylor/template_ +stuff/aimages/yjj.jpg ls -lht >>text2.txt $

How do I write this script so that perl knows it exited successfully? stdout has the details, and I liked the calculations that were going to land these images at the desired sizes. Clearly, I need to poke around with other numbers for resize.

So I'm at the point where I'm wondering about the tool chain. As I said in the original post, working up an ImageMagick capability feels like being hazed, but it's all about honing the tools. I don't think I want to use mogrify, because that's gonna stomp all over my image in round one. Furthermore, I want to compare results when I use differing scaling schemas. The only thing significant about the image names is their extension and their lexicographic order relative to each other, as this determines their order. Is there a module for coming up with arbitrary filenames which are guaranteed to be well-behaved?


In reply to Re^5: Using ImageMagick effectively by Aldebaran
in thread Using ImageMagick effectively by Aldebaran

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.