summaryrefslogtreecommitdiff
path: root/include/gen-xhtml-thumbnails
blob: ee8087a998120b8617eb7fdffb4654563a633373 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/perl
# Copyright © 2009 by Daniel Friesel <derf@derf.homelinux.org>
# License: WTFPL <http://sam.zoy.org/wtfpl>
use strict;
use warnings;
use Image::Imlib2;

my $directory = shift || '.';
my $thumbdir  = "$directory/.thumbs";
my $indexfile = "$directory/index.xhtml";
my ($file, $image, $thumb);
my ($dx, $dy);
my @files;
my $number = 0;

sub print_progress {
	if (($number % 60) == 0) {
		if ($number) {
			printf(" %4d/%d\n", $number, scalar(@files));
		}
		printf('[%3d%%] ', $number * 100 / @files);
	} elsif (($number % 10) == 0) {
		print ' ';
	}
}

$| = 1;
open(my $index, '>', $indexfile);

print $index <<ficken;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	<title></title>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
	<link rel="stylesheet" type="text/css" href="foo.css"/>
</head>
<body><div>
ficken

if (! -d $thumbdir) {
	mkdir($thumbdir) or die("cannot create $thumbdir: $!");
}

opendir(my $dirhandle, $directory) or die("Cannot open $directory: $!");
foreach $file (readdir($dirhandle)) {
	push(@files, $file) if ($file =~ /\.(png|jpe?g)$/i);
}
closedir($dirhandle);

print "Generating thumbnails [ - cached | + generated ]\n";

foreach $file (@files) {
print $index <<ficken;
	<a href="$file"><img src=".thumbs/$file"/></a>
ficken

	print_progress;
	$number++;
	if (-e "$thumbdir/$file") {
		print '-';
		next;
	}
	$image = Image::Imlib2->load($file);
	($dx, $dy) = ($image->width, $image->height);
	if ($dx > $dy) {
		$thumb = $image->create_scaled_image(150, 0);
	} else {
		$thumb = $image->create_scaled_image(0, 150);
	}
	$thumb->set_quality(60);
	$thumb->save("$thumbdir/$file");
	chmod(0644, "$thumbdir/$file");
	print '+';
}
print "\n";

print $index <<ficken;
</div></body>
</html>
ficken

close($index);
chmod(0644, $indexfile);

__END__

=head1 NAME

gen-xhtml-thumbnails - Generate Thumbnails + Index for a set of images

=head1 SYNOPSIS

B<gen-xhtml-thumbnails> [I<directory>]

=head1 DESCRIPTION

gen-xhtml-thumbnails will create an F<index.xhtml> with a list (thumbnails) of
all images found if I<directory>; the thumbnails will link to the images.

The F<index.xhtml> file will always be created in I<directory>.
The thumbnails will be saved in F<.thumbs>, also in I<directory>.
If I<directory> is not specified, the current directory is used.

Note that only the images in the directory itself will be processed, recursion
is not supported.