return $filename;
}
-function path_to_convert() {
- if(!isset($GLOBALS['path_to_convert'])) {
- $convert = '/usr/local/bin/convert';
- if(!file_exists($convert)) {
- $convert = '/usr/bin/convert';
- }
- if(!file_exists($convert)) {
- $convert = `which convert`;
- }
- if($convert == '' || !file_exists($convert)) {
- die("can't find imagemagick's 'convert' program");
- }
+# this function exists to deal with cases where binaries are installed in very
+# standard places (like /usr/bin or /usr/local bin) and PHP's PATH environment
+# variable is not set appropriately.
+function path_to($prog, $or_die = true) {
+ $prog = ereg_replace('[^a-zA-Z0-9_.-]', '', $prog);
+ $prog = ereg_replace('^[-.]*', '', $prog);
+ if($prog == '') {
+ die('Invalid argument to path_to()');
+ }
- $GLOBALS['path_to_convert'] = $convert;
+ if(!isset($GLOBALS["path_to_$prog"])) {
+ $ret = _path_to($prog, $or_die);
+ if($ret == false) {
+ return false;
+ }
+ $GLOBALS["path_to_$prog"] = $ret;
}
- return $GLOBALS['path_to_convert'];
+ return $GLOBALS["path_to_$prog"];
+}
+
+function _path_to($prog, $or_die) {
+ # relies on PHP's short-circuit mechanism
+ if(file_exists($path = "/usr/local/bin/$prog") ||
+ file_exists($path = "/usr/bin/$prog") ||
+ ($path = `which $prog` != '' && file_exists($path))) {
+ return $path;
+ } else {
+ if($or_die) {
+ die("Failed to locate '$prog' executable.");
+ }
+ return false;
+ }
}
-
+
# returns new filename with .png extension
function gif_to_png($filename, $new_filename = 'just change extension') {
$new_filename .= '.png';
}
- $convert = path_to_convert();
+ $convert = path_to('convert');
$command = "$convert " . escapeshellarg($filename) . ' ' . escapeshellarg($new_filename);
# Thumbnail will retain aspect ratio, and be either $max_width wide or
# $max_height tall (or, if the aspect is just right, both)
function make_thumbnail($filename, $max_width = '70', $max_height = '70') {
- $thumb = ereg_replace('[.]([a-z]+)$', "_thumb.\\1", $filename);
- if($thumb == $filename) {
+ $last_dot = strrpos($filename, '.');
+ if($last_dot === false) {
die("couldn't make thumbnail because filename has no extension.");
}
- $convert = path_to_convert();
+ $thumb = substr($filename, 0, $last_dot);
+ $thumb .= '_thumb';
+ $thumb .= substr($filename, $last_dot);
+
+ $convert = path_to('convert');
# can't be too careful
$max_width = ereg_replace('[^0-9]', '', $max_width);
exec($command, $dummy, $ret);
if($ret != 0) {
- die("Thumbnail creatin failed. convert did exit($ret)");
+ die("Thumbnail creation failed. Convert called exit($ret)");
}
return $thumb;
}
+# Argument: path to image file
+#
+# Return: string in the format WIDTHxHEIGHT, or boolean false
+#
+# Example: image_dimensions('uploads/foo.png'); ==> "124x58"
+function image_dimensions($image) {
+ $identify = path_to('identify');
+ $command = "$identify -format '%wx%h' " . escapeshellarg($image);
+ $dimensions = rtrim(`$command`);
+ if($dimensions == '') {
+ return false;
+ } else {
+ return $dimensions;
+ }
+}
+
# like save_uploaded_file() (above) except it converts gifs to pngs.
#
# FIXME: if a filename is passed in the end of path, we should check if the file type matches, and if not run convert.