#!/usr/local/bin/perl -w
###########################################
# meme-simple - Create a simple Image Macro
# Mike Schilli, 2013 (m@perlmeister.com)
###########################################
use strict;
use Imager;

my $margin_y   = 100;
my $font_size  = 60;
my $font_color = "white";

my( $file, $header, $footer ) = @ARGV;

die "usage: file header footer" 
  if scalar @ARGV != 3;

my $img = Imager->new( 
  file => $file ) or 
  die Imager->errstr();

my $font = Imager::Font->new( 
  file => 
    "/usr/share/fonts/truetype/" .
    "msttcorefonts/Impact.ttf", 
  size  => $font_size,
  color => $font_color,
);

my( $header_w, $header_h ) = 
  dimensions( $font, $header );

my( $footer_w, $footer_h ) = 
  dimensions( $font, $footer );

my $footer_x =
  ( $img->getwidth() - $footer_w ) / 2;

my $header_x =
  ( $img->getwidth() - $header_w ) / 2;

$img->string(
  x => $header_x, y => $margin_y,
  string => $header,
  font => $font, size => $font_size,
  aa => 1, color => $font_color );

$img->string( 
  x => $footer_x, 
  y => $img->getheight() - 
       $margin_y + $footer_h,
  string => $footer,
  font => $font, size => $font_size,
  aa => 1, color => $font_color );

( my $outfile = $file ) =~ s/\./-meme./;
$img->write( file => $outfile );

###########################################
sub dimensions {
###########################################
  my( $font, $string ) = @_;

  my( $neg_width, $global_desc, 
      $pos_width, $global_asc,
      $desc, $asc,
    ) = $font->bounding_box( 
        string => $string );

    return $pos_width - $neg_width,
           $asc - $desc;
}
