From 28671d92c02ec8a8636f45511f9bb79110b49d58 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Mon, 12 Nov 2012 13:56:29 +0100 Subject: [PATCH] move code to better places --- lib/helper.php | 10 ++ lib/image.php | 277 ++++++++++++++++++++++++------------------------- 2 files changed, 146 insertions(+), 141 deletions(-) diff --git a/lib/helper.php b/lib/helper.php index ccceb58cd4c..5a93e6533de 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -712,4 +712,14 @@ class OC_Helper { return false; } + + + public static function ellipsis($str, $maxlen) { + if (strlen($str) > $maxlen) { + $characters = floor($maxlen / 2); + return substr($str, 0, $characters) . '...' . substr($str, -1 * $characters); + } + return $str; + } + } diff --git a/lib/image.php b/lib/image.php index 50f79274d13..e93df02f247 100644 --- a/lib/image.php +++ b/lib/image.php @@ -20,148 +20,8 @@ * License along with this library. If not, see . * */ -if ( ! function_exists( 'imagebmp') ) { - /** - * Output a BMP image to either the browser or a file - * @link http://www.ugia.cn/wp-data/imagebmp.php - * @author legend - * @link http://www.programmierer-forum.de/imagebmp-gute-funktion-gefunden-t143716.htm - * @author mgutt - * @version 1.00 - * @param resource $image - * @param string $filename [optional]

The path to save the file to.

- * @param int $bit [optional]

Bit depth, (default is 24).

- * @param int $compression [optional] - * @return bool TRUE on success or FALSE on failure. - */ - function imagebmp($im, $filename='', $bit=24, $compression=0) { - if (!in_array($bit, array(1, 4, 8, 16, 24, 32))) { - $bit = 24; - } - else if ($bit == 32) { - $bit = 24; - } - $bits = pow(2, $bit); - imagetruecolortopalette($im, true, $bits); - $width = imagesx($im); - $height = imagesy($im); - $colors_num = imagecolorstotal($im); - $rgb_quad = ''; - if ($bit <= 8) { - for ($i = 0; $i < $colors_num; $i++) { - $colors = imagecolorsforindex($im, $i); - $rgb_quad .= chr($colors['blue']) . chr($colors['green']) . chr($colors['red']) . "\0"; - } - $bmp_data = ''; - if ($compression == 0 || $bit < 8) { - $compression = 0; - $extra = ''; - $padding = 4 - ceil($width / (8 / $bit)) % 4; - if ($padding % 4 != 0) { - $extra = str_repeat("\0", $padding); - } - for ($j = $height - 1; $j >= 0; $j --) { - $i = 0; - while ($i < $width) { - $bin = 0; - $limit = $width - $i < 8 / $bit ? (8 / $bit - $width + $i) * $bit : 0; - for ($k = 8 - $bit; $k >= $limit; $k -= $bit) { - $index = imagecolorat($im, $i, $j); - $bin |= $index << $k; - $i++; - } - $bmp_data .= chr($bin); - } - $bmp_data .= $extra; - } - } - // RLE8 - else if ($compression == 1 && $bit == 8) { - for ($j = $height - 1; $j >= 0; $j--) { - $last_index = "\0"; - $same_num = 0; - for ($i = 0; $i <= $width; $i++) { - $index = imagecolorat($im, $i, $j); - if ($index !== $last_index || $same_num > 255) { - if ($same_num != 0) { - $bmp_data .= chr($same_num) . chr($last_index); - } - $last_index = $index; - $same_num = 1; - } - else { - $same_num++; - } - } - $bmp_data .= "\0\0"; - } - $bmp_data .= "\0\1"; - } - $size_quad = strlen($rgb_quad); - $size_data = strlen($bmp_data); - } - else { - $extra = ''; - $padding = 4 - ($width * ($bit / 8)) % 4; - if ($padding % 4 != 0) { - $extra = str_repeat("\0", $padding); - } - $bmp_data = ''; - for ($j = $height - 1; $j >= 0; $j--) { - for ($i = 0; $i < $width; $i++) { - $index = imagecolorat($im, $i, $j); - $colors = imagecolorsforindex($im, $index); - if ($bit == 16) { - $bin = 0 << $bit; - $bin |= ($colors['red'] >> 3) << 10; - $bin |= ($colors['green'] >> 3) << 5; - $bin |= $colors['blue'] >> 3; - $bmp_data .= pack("v", $bin); - } - else { - $bmp_data .= pack("c*", $colors['blue'], $colors['green'], $colors['red']); - } - } - $bmp_data .= $extra; - } - $size_quad = 0; - $size_data = strlen($bmp_data); - $colors_num = 0; - } - $file_header = 'BM' . pack('V3', 54 + $size_quad + $size_data, 0, 54 + $size_quad); - $info_header = pack('V3v2V*', 0x28, $width, $height, 1, $bit, $compression, $size_data, 0, 0, $colors_num, 0); - if ($filename != '') { - $fp = fopen($filename, 'wb'); - fwrite($fp, $file_header . $info_header . $rgb_quad . $bmp_data); - fclose($fp); - return true; - } - echo $file_header . $info_header. $rgb_quad . $bmp_data; - return true; - } -} - -//From user comments at http://dk2.php.net/manual/en/function.exif-imagetype.php -if ( ! function_exists( 'exif_imagetype' ) ) { - function exif_imagetype ( $filename ) { - if ( ( $info = getimagesize( $filename ) ) !== false ) { - return $info[2]; - } - return false; - } -} - -function ellipsis($str, $maxlen) { - if (strlen($str) > $maxlen) { - $characters = floor($maxlen / 2); - return substr($str, 0, $characters) . '...' . substr($str, -1 * $characters); - } - return $str; -} - /** * Class for basic image manipulation - * */ class OC_Image { protected $resource = false; // tmp resource. @@ -525,7 +385,7 @@ class OC_Image { public function loadFromFile($imagepath=false) { if(!is_file($imagepath) || !file_exists($imagepath) || !is_readable($imagepath)) { // Debug output disabled because this method is tried before loadFromBase64? - OC_Log::write('core', 'OC_Image->loadFromFile, couldn\'t load: '.ellipsis($imagepath, 50), OC_Log::DEBUG); + OC_Log::write('core', 'OC_Image->loadFromFile, couldn\'t load: '.$imagepath, OC_Log::DEBUG); return false; } $itype = exif_imagetype($imagepath); @@ -951,3 +811,138 @@ class OC_Image { $this->destroy(); } } +if ( ! function_exists( 'imagebmp') ) { + /** + * Output a BMP image to either the browser or a file + * @link http://www.ugia.cn/wp-data/imagebmp.php + * @author legend + * @link http://www.programmierer-forum.de/imagebmp-gute-funktion-gefunden-t143716.htm + * @author mgutt + * @version 1.00 + * @param resource $image + * @param string $filename [optional]

The path to save the file to.

+ * @param int $bit [optional]

Bit depth, (default is 24).

+ * @param int $compression [optional] + * @return bool TRUE on success or FALSE on failure. + */ + function imagebmp($im, $filename='', $bit=24, $compression=0) { + if (!in_array($bit, array(1, 4, 8, 16, 24, 32))) { + $bit = 24; + } + else if ($bit == 32) { + $bit = 24; + } + $bits = pow(2, $bit); + imagetruecolortopalette($im, true, $bits); + $width = imagesx($im); + $height = imagesy($im); + $colors_num = imagecolorstotal($im); + $rgb_quad = ''; + if ($bit <= 8) { + for ($i = 0; $i < $colors_num; $i++) { + $colors = imagecolorsforindex($im, $i); + $rgb_quad .= chr($colors['blue']) . chr($colors['green']) . chr($colors['red']) . "\0"; + } + $bmp_data = ''; + if ($compression == 0 || $bit < 8) { + $compression = 0; + $extra = ''; + $padding = 4 - ceil($width / (8 / $bit)) % 4; + if ($padding % 4 != 0) { + $extra = str_repeat("\0", $padding); + } + for ($j = $height - 1; $j >= 0; $j --) { + $i = 0; + while ($i < $width) { + $bin = 0; + $limit = $width - $i < 8 / $bit ? (8 / $bit - $width + $i) * $bit : 0; + for ($k = 8 - $bit; $k >= $limit; $k -= $bit) { + $index = imagecolorat($im, $i, $j); + $bin |= $index << $k; + $i++; + } + $bmp_data .= chr($bin); + } + $bmp_data .= $extra; + } + } + // RLE8 + else if ($compression == 1 && $bit == 8) { + for ($j = $height - 1; $j >= 0; $j--) { + $last_index = "\0"; + $same_num = 0; + for ($i = 0; $i <= $width; $i++) { + $index = imagecolorat($im, $i, $j); + if ($index !== $last_index || $same_num > 255) { + if ($same_num != 0) { + $bmp_data .= chr($same_num) . chr($last_index); + } + $last_index = $index; + $same_num = 1; + } + else { + $same_num++; + } + } + $bmp_data .= "\0\0"; + } + $bmp_data .= "\0\1"; + } + $size_quad = strlen($rgb_quad); + $size_data = strlen($bmp_data); + } + else { + $extra = ''; + $padding = 4 - ($width * ($bit / 8)) % 4; + if ($padding % 4 != 0) { + $extra = str_repeat("\0", $padding); + } + $bmp_data = ''; + for ($j = $height - 1; $j >= 0; $j--) { + for ($i = 0; $i < $width; $i++) { + $index = imagecolorat($im, $i, $j); + $colors = imagecolorsforindex($im, $index); + if ($bit == 16) { + $bin = 0 << $bit; + $bin |= ($colors['red'] >> 3) << 10; + $bin |= ($colors['green'] >> 3) << 5; + $bin |= $colors['blue'] >> 3; + $bmp_data .= pack("v", $bin); + } + else { + $bmp_data .= pack("c*", $colors['blue'], $colors['green'], $colors['red']); + } + } + $bmp_data .= $extra; + } + $size_quad = 0; + $size_data = strlen($bmp_data); + $colors_num = 0; + } + $file_header = 'BM' . pack('V3', 54 + $size_quad + $size_data, 0, 54 + $size_quad); + $info_header = pack('V3v2V*', 0x28, $width, $height, 1, $bit, $compression, $size_data, 0, 0, $colors_num, 0); + if ($filename != '') { + $fp = fopen($filename, 'wb'); + fwrite($fp, $file_header . $info_header . $rgb_quad . $bmp_data); + fclose($fp); + return true; + } + echo $file_header . $info_header. $rgb_quad . $bmp_data; + return true; + } +} + +if ( ! function_exists( 'exif_imagetype' ) ) { + /** + * Workaround if exif_imagetype does not exist + * @link http://www.php.net/manual/en/function.exif-imagetype.php#80383 + * @param string $filename + * @return string|boolean + */ + function exif_imagetype ( $filename ) { + if ( ( $info = getimagesize( $filename ) ) !== false ) { + return $info[2]; + } + return false; + } +} -- 2.39.5