#! /usr/bin/perl -w
# Convert larger image of Album Art into standard sized, square, image
# for best use embedded in MP3 files.
#
# Source image is named on command line, or assumed to be coverfull.jpg
# Destination file is "folder.jpg", which seems to be the convention for
# image art for the album in some older players.
#
# Destination file size is set to 300x300 at present, as recommended by
#
# http://www.richardfarrar.com/embedding-album-art-in-mp3-files/
# 
# since that seems to be the most compatible size.
#
# Written by Ewen McNeill <ewen@naos.co.nz>, 2009-12-28
#---------------------------------------------------------------------------

use strict;
use Image::Info     qw(image_info);       # Debian: libimage-info-perl
use Image::Magick;                        # Debian: perlmagick

my $LARGEST_DIMENSION = 300;
my $IMAGE_QUALITY     = 92;
my $OUTPUT_FILE       = "folder.jpg";

my $inputfile = $ARGV[0] || 'coverfull.jpg';
die "Unable to find input file ($inputfile)" unless (-f $inputfile);

my $imagedetails = (image_info($inputfile))[0];
my $newwidth     = $imagedetails->{width};
my $newheight    = $imagedetails->{height};

# Scale image down so that the result is no bigger than desired
if ($newwidth > $LARGEST_DIMENSION || $newheight > $LARGEST_DIMENSION) {
    if ($newwidth > $newheight) {
        $newheight = int($newheight / ($newwidth / $LARGEST_DIMENSION));
        $newwidth  = $LARGEST_DIMENSION;
    } else {
        $newwidth = int($newwidth / ($newheight / $LARGEST_DIMENSION));
        $newheight  = $LARGEST_DIMENSION;
    }
}

my $image = new Image::Magick;
$image->Read($inputfile) == 1 || die "Cannot load '$inputfile'\n";
$image->Scale(width => $newwidth, height => $newheight);
$image->Set(quality => $IMAGE_QUALITY);
$image->Write("jpeg:$OUTPUT_FILE");
