123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <?php
- function get_gd_version()
- {
- return GD_VERSION;
- }
- function get_php_info()
- {
- ob_start();
- phpinfo();
- $info = ob_get_contents();
- ob_end_clean();
- return $info;
- }
- function get_freetype_version()
- {
- $version = 0;
- if (preg_match(',FreeType Version => (\d+\.\d+\.\d+),s', get_php_info(), $match)) {
- $version = $match[1];
- }
- return $version;
- }
- function get_libjpeg_version()
- {
- $version = 0;
- if (preg_match(',libJPEG Version => ([a-z0-9]+),s', get_php_info(), $match)) {
- $version = $match[1];
- }
- return $version;
- }
- function get_libpng_version()
- {
- $version = 0;
- if (preg_match(',libPNG Version => (\d+\.\d+\.\d+),s', get_php_info(), $match)) {
- $version = $match[1];
- }
- return $version;
- }
- function get_libxpm_version()
- {
- $version = 0;
- if (preg_match(',libXpm Version => (\d+),s', get_php_info(), $match)) {
- $version = $match[1];
- }
- return $version;
- }
- /**
- * Tests that an in-memory image equals a PNG file.
- *
- * It checks for equal image sizes, and whether any pixels are different.
- * The textual result is printed, so the EXPECT section should contain the line
- * "The images are equal."
- *
- * If the PNG file does not exist, or the images are not equal, a diagnostic
- * message is printed, and the actual file is stored right beside the temporary
- * .php test file with the extension .out.png, to be able to manually inspect
- * the result.
- *
- * @param string $filename
- * @param resource $actual
- * @return void
- */
- function test_image_equals_file($filename, $actual)
- {
- if (!file_exists($filename)) {
- echo "The expected image does not exist.\n";
- save_actual_image($actual);
- return;
- }
- $actual = test_to_truecolor($actual);
- $expected = imagecreatefrompng($filename);
- $expected = test_to_truecolor($expected);
- $exp_x = imagesx($expected);
- $exp_y = imagesy($expected);
- $act_x = imagesx($actual);
- $act_y = imagesy($actual);
- if ($exp_x != $act_x || $exp_y != $act_y) {
- echo "The image size differs: expected {$exp_x}x{$exp_y}, got {$act_x}x{$act_y}.\n";
- save_actual_image($actual);
- return;
- }
- $pixels_changed = 0;
- for ($y = 0; $y < $exp_y; $y++) {
- for ($x = 0; $x < $exp_x; $x ++) {
- $exp_c = imagecolorat($expected, $x, $y);
- $act_c = imagecolorat($actual, $x, $y);
- if ($exp_c != $act_c) {
- $pixels_changed++;
- }
- }
- }
- if (!$pixels_changed) {
- echo "The images are equal.\n";
- } else {
- echo "The images differ in {$pixels_changed} pixels.\n";
- save_actual_image($actual);
- }
- }
- /**
- * Returns the truecolor version of an image.
- *
- * @param resource $image
- * @return resource
- */
- function test_to_truecolor($image)
- {
- if (imageistruecolor($image)) {
- return $image;
- } else {
- $width = imagesx($image);
- $height = imagesy($image);
- $result = imagecreatetruecolor($width, $height);
- imagecopy($result, $image, 0,0, 0,0, $width, $height);
- return $result;
- }
- }
- /**
- * Saves an actual image to disk.
- *
- * The image is saved right beside the temporary .php test file with the
- * extension .out.png.
- *
- * @param resource $image
- * @return void
- */
- function save_actual_image($image)
- {
- $pathinfo = pathinfo($_SERVER['SCRIPT_FILENAME']);
- $filename = "{$pathinfo['dirname']}/{$pathinfo['filename']}.out.png";
- imagepng($image, $filename);
- }
- /**
- * Replicates write errors to the output log, but by catching
- * and formatting exceptions instead so they have a consistent
- * output
- */
- function trycatch_dump(...$tests) {
- foreach ($tests as $test) {
- try {
- var_dump($test());
- }
- catch (\Error $e) {
- echo '!! [' . get_class($e) . '] ' . $e->getMessage() . "\n";
- }
- }
- }
|