1
0
mirror of https://github.com/mosbth/cimage.git synced 2025-08-25 00:45:50 +02:00

Compare commits

...

52 Commits
v0.5 ... v0.5.3

Author SHA1 Message Date
Mikael Roos
ccc59fbb3a Prepare to tag v0.5.3 2014-11-21 21:14:19 +01:00
Mikael Roos
e85bc6cee5 Adding testfiles with capital extension 2014-11-21 21:12:22 +01:00
Mikael Roos
3b7485b3b9 Support filenames of uppercase JPEG, JPG, PNG and GIF, as proposed in #37. 2014-11-21 21:01:22 +01:00
Mikael Roos
c83eac8c3c Changing CImage::output() as proposed in #37. 2014-11-21 20:20:35 +01:00
Mikael Roos
78ac29752e Adding security check that image filename is always below the path
`image_path` as specified in `img_config.php` #37.
2014-11-21 19:57:11 +01:00
Mikael Roos
4b64237a4c Changeing comment 2014-11-21 19:37:33 +01:00
Mikael Roos
85f0e3e7d3 moving testilfes to one dir 2014-11-21 19:35:04 +01:00
Mikael Roos
da227d49dd Use the new config item for checking valid filename characters. 2014-11-21 19:34:01 +01:00
Mikael Roos
26449a3236 Adding configuration item to set what valid characters are for the image
filename.
2014-11-21 19:32:05 +01:00
Mikael Roos
20a4f848b7 Moved all test-files into own directory. 2014-11-21 19:24:36 +01:00
Mikael Roos
ec3a6f3491 check if extension exif is loaded #36 2014-09-01 01:27:45 +02:00
Mikael Roos
8523ef5e31 adding testcases for #36 2014-09-01 00:38:26 +02:00
Mikael Roos
63112f58b1 Cleaning up code #23, added rotate and autoRotate #36 2014-08-31 23:58:02 +02:00
Mikael Roos
c96ed10f80 Cleaning up code #23, added rotate and autoRotate #36 2014-08-31 23:57:34 +02:00
Mikael Roos
67524bd090 Adding MIT license text as should be. 2014-08-21 02:46:00 +02:00
Mikael Roos
1f9a11747b Readding cache dir 2014-08-21 02:37:58 +02:00
Mikael Roos
4ed55d59e3 finally setting jpeg_ignore_warning to true #34 2014-08-21 02:30:32 +02:00
Mikael Roos
8dde82993b improving error handling when opening (non)-recoverable images 2014-08-21 02:23:15 +02:00
Mikael Roos
fb261b1b05 improving error handling when opening (non)-recoverable images 2014-08-21 02:22:20 +02:00
Mikael Roos
1a6cef6580 improving error handling when opening (non)-recoverable images 2014-08-21 02:21:32 +02:00
Mikael Roos
2643d4954f must have @ before open images, warning contra notice, recoverable and non recoverable 2014-08-21 02:13:01 +02:00
Mikael Roos
ef1d56085a Verbose error when failing to open image 2014-08-21 02:08:49 +02:00
Mikael Roos
28cda0ea28 changing error handling to dir when failing to open a corrupt image 2014-08-21 02:02:50 +02:00
Mikael Roos
ed9949b717 adding corrupt jpegs for #34 2014-08-21 01:37:05 +02:00
Mikael Roos
c249a472d6 adding pre 2014-08-21 01:25:19 +02:00
Mikael Roos
c8c2e5f95f updated with change #34 2014-08-21 01:20:50 +02:00
Mikael Roos
8db8501eb0 Setting gd.jpeg_ignore_warning to true #34 as default 2014-08-21 01:19:56 +02:00
Mikael Roos
2b0b3859a7 Extended info printed #35 2014-08-21 00:31:05 +02:00
Mikael Roos
1e70883771 Now sends 404 header as it should #32 when providing a error page 2014-08-20 23:55:23 +02:00
Mikael Roos
b2002d0087 Now sends 404 header as it should #32 when providing a error page 2014-08-20 23:54:13 +02:00
Mikael Roos
9aac0cde8e Removed old description, its in the README now, focus on testcases. 2014-08-20 23:49:25 +02:00
Mikael Roos
3dec1d0a6d Merge pull request #33 from garagesocial/patch-2
Update CImage.php
2014-08-15 08:54:59 +02:00
Garagesocial
577e5fa5d4 Update CImage.php 2014-08-15 02:07:07 -04:00
Mikael Roos
38a6c86317 Merge pull request #31 from garagesocial/patch-1
Comment Typo CImage.php
2014-08-07 08:18:17 +02:00
Garagesocial
dcb390a17b Comment Typo CImage.php 2014-08-06 19:02:55 -04:00
Mikael Roos
9e461787c7 comment reflected wrongly to area variabel, issue #29 2014-05-20 01:39:51 +02:00
Mikael Roos
a96cd7a4cc changed colors 2014-05-20 01:15:53 +02:00
Mikael Roos
98d971204f correcting links to image 2014-05-20 01:04:26 +02:00
Mikael Roos
9707065b9e trying and failing to verify issue 29 2014-05-20 00:56:30 +02:00
Mikael Roos
5cd953b9b3 issue 29 and code formatting 2014-05-20 00:56:08 +02:00
Mikael Roos
b4f51f3438 code formatting and making log() public 2014-05-20 00:55:43 +02:00
Mikael Roos
dedd01bc71 Helper to check if img.php is supported on this system 2014-05-20 00:12:46 +02:00
Mikael Roos
67d0cf27ee code formatting and slightly reformatted verbose output 2014-05-20 00:12:09 +02:00
Mikael Roos
161fdfe769 code formatting 2014-05-20 00:00:27 +02:00
Mikael Roos
6cff9ac105 better error reporting for development environment 2014-05-19 23:59:50 +02:00
Mikael Roos
ec42c41e4d Verified known bug - sharpen acts as blur in PHP 5.5.9 and 5.5.10 #28 2014-04-01 08:56:38 +02:00
Mikael Roos
f12d02b8c1 Correcting issue #27 and removing default config-options from img.php 2014-04-01 08:44:38 +02:00
Mikael Roos
1673cd7aca Correcting issue #26 2014-04-01 08:11:49 +02:00
Mikael Roos
0fee846437 tag v0.5.1 2014-02-12 15:29:58 +01:00
Mikael Roos
c63747a892 Adding empty cache-directory to repo 2014-02-12 15:25:29 +01:00
Mikael Roos
2d8cccc795 Display image in README 2014-02-12 15:22:52 +01:00
Mikael Roos
bb5fd6f115 Display image in README 2014-02-12 15:22:06 +01:00
33 changed files with 1124 additions and 272 deletions

4
.gitignore vendored
View File

@@ -1,4 +1,4 @@
# Cache files #
######################
cache/_*

cache/*

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +1,21 @@
This is a software solution to a general known problem.
Free software. Use at own risk.
The MIT License (MIT)
Copyright (c) 2012 - 2014 Mikael Roos, me@mikaelroos.se
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -26,12 +26,12 @@ This is free software and open source software, licensed according MIT.
Installation and get going
-------------------------------------
**Latest stable version is v0.5 released 2014-02-12.**
**Latest stable version is v0.5.2 released 2014-04-01.**
```bash
git clone git://github.com/mosbth/cimage.git
cd cimage
git checkout v0.5
git checkout v0.5.2
```
Make the cache-directory writable by the webserver.
@@ -50,13 +50,13 @@ Review the settings in `webroot/img_config.php` and check out `webroot/img.php`
Usage
-------------------------------------
###List of parameters {#parameters}
###List of parameters
The `img.php` supports a lot of parameters. Combine the parameters to get the desired behavior and resulting image. For example, take the original image, resize it using width, aspect-ratio and crop-to-fit, apply a sharpen effect, save the image as JPEG using quality 30.
| `img.php?src=kodim13.png&w=600&aspect-ratio=4&crop-to-fit&sharpen&save-as=jpg&q=30` |
|-----------------------------------------------------------|
| <img src=/kod-exempel/cimage_/webroot/img.php?src=kodim13.png&w=600&aspect-ratio=4&crop-to-fit&sharpen&save-as=jpg&q=30 alt=''> |
| <img src=http://dbwebb.se/kod-exempel/cimage_/webroot/img.php?src=kodim13.png&w=600&aspect-ratio=4&crop-to-fit&sharpen&save-as=jpg&q=30 alt=''> |
Here is a list of all parameters that you can use together with `img.php`, grouped by its basic intent of usage.
@@ -131,7 +131,45 @@ Revision history
-------------------------------------
v0.5 (2014-02-07)
v0.5.3 (2014-11-21)
* Support filenames of uppercase JPEG, JPG, PNG and GIF, as proposed in #37.
* Changing `CImage::output()` as proposed in #37.
* Adding security check that image filename is always below the path `image_path` as specified in `img_config.php` #37.
* Adding configuration item in `img_config.php` for setting valid characters in image filename.
* Moving `webroot/test*` into directory `webroot/test`.
* `webroot/check_system.php` now outputs if extension for exif is loaded.
* Broke API when `initDimensions()` split into two methods, new `initDimensions()` and `loadImageDetails()`.
* Added `autoRotate,`aro` to auto rotate image based on EXIF information.
* Added `bgColor,`bgc` to use as backgroundcolor when needing a filler color, for example rotate 45.
* Added `rotateBefore,`rb` to rotate image a certain angle before processing.
* Added `rotateAfter,`ra` to rotate image a certain angle after processing.
* Cleaned up code formatting, removed trailing spaces.
* Removed @ from opening images, better to display correct warning when failing #34, but put it back again.
* Setting gd.jpeg_ignore_warning to true as default #34.
* `webroot/check_system.php` now outputs version of PHP and GD.
* #32 correctly send 404 header when serving an error message.
* Trying to verify issue #29, but can not.
* Adding structure for testprograms together with, use `webroot/test_issue29.php` as sample.
* Improving code formatting.
* Moving parts of verbose output from img.php to CImage.php.
v0.5.2 (2014-04-01)
* Correcting issue #26 providing error message when not using postprocessing.
* Correcting issue #27 warning of default timezone.
* Removed default $config options in `img.php`, was not used, all configuration should be in `img_config.php`.
* Verified known bug - sharpen acts as blur in PHP 5.5.9 and 5.5.10 #28
v0.5.1 (2014-02-12)
* Display image in README-file.
* Create an empty `cache` directory as part of repo.
v0.5 (2014-02-12)
* Change constant name `CImage::PNG_QUALITY_DEFAULT` to `CImage::PNG_COMPRESSION_DEFAULT`.
* Split JPEG quality and PNG compression, `CImage->quality` and `CImage->compression`

1
cache/README.md vendored Normal file
View File

@@ -0,0 +1 @@
This directory must be writable by the webserver.

15
webroot/check_system.php Normal file
View File

@@ -0,0 +1,15 @@
<?php
echo 'Current PHP version: ' . phpversion() . '<br><br>';
echo 'Running on: ' . $_SERVER['SERVER_SOFTWARE'] . '<br><br>';
$no = extension_loaded('gd') ? null : 'NOT';
echo "Extension gd is $no loaded.<br>";
$no = extension_loaded('exif') ? null : 'NOT';
echo "Extension exif is $no loaded.<br>";
if (!$no) {
echo "<pre>", var_dump(gd_info()), "</pre>";
}

View File

@@ -12,9 +12,9 @@
*
* @return void
*/
function errorPage($msg)
function errorPage($msg)
{
header("Status: 404 Not Found");
header("HTTP/1.0 404 Not Found");
die('img.php say 404: ' . $msg);
}
@@ -23,7 +23,7 @@ function errorPage($msg)
/**
* Custom exception handler.
*/
set_exception_handler(function($exception) {
set_exception_handler(function ($exception) {
errorPage("<p><b>img.php: Uncaught exception:</b> <p>" . $exception->getMessage() . "</p><pre>" . $exception->getTraceAsString(), "</pre>");
});
@@ -37,7 +37,7 @@ set_exception_handler(function($exception) {
*
* @return mixed value from $_GET or default value.
*/
function get($key, $default = null)
function get($key, $default = null)
{
if (is_array($key)) {
foreach ($key as $val) {
@@ -62,9 +62,9 @@ function get($key, $default = null)
*
* @return mixed value as $defined or $undefined.
*/
function getDefined($key, $defined, $undefined)
function getDefined($key, $defined, $undefined)
{
return get($key) === null ? $undefined : $defined;
return get($key) === null ? $undefined : $defined;
}
@@ -76,7 +76,7 @@ function getDefined($key, $defined, $undefined)
*
* @return void or array.
*/
function verbose($msg = null)
function verbose($msg = null)
{
global $verbose;
static $log = array();
@@ -95,19 +95,26 @@ function verbose($msg = null)
/**
* Default configuration options, can be overridden in own config-file.
* Get configuration options from file.
*/
$config = array(
);
$configFile = __DIR__.'/'.basename(__FILE__, '.php').'_config.php';
$config = array_merge($config, require $configFile);
$config = require $configFile;
call_user_func($config['error_reporting']);
/**
* Set default timezone if not set or if its set in the config-file.
*/
if (isset($config['default_timezone'])) {
date_default_timezone_set($config['default_timezone']);
} else if (!ini_get('default_timezone')) {
date_default_timezone_set('UTC');
}
/**
* verbose, v - do a verbose dump of what happens
*/
@@ -121,9 +128,32 @@ $verbose = getDefined(array('verbose', 'v'), true, false);
$srcImage = get('src')
or errorPage('Must set src-attribute.');
preg_match('#^[a-z0-9A-Z-/_\.]+$#', $srcImage)
// Check for valid/invalid characters
preg_match($config['valid_filename'], $srcImage)
or errorPage('Filename contains invalid characters.');
// Check that the image is a file below the directory 'image_path'.
if ($config['image_path_constraint']) {
$pathToImage = realpath($config['image_path'] . $srcImage);
$imageDir = realpath($config['image_path']);
is_file($pathToImage)
or errorPage(
'Source image is not a valid file, check the filename and that a
matching file exists on the filesystem.'
);
substr_compare($imageDir, $pathToImage, 0, strlen($imageDir)) == 0
or errorPage(
'Security constraint: Source image is not below the directory "image_path"
as specified in the config file img_config.php.'
);
}
verbose("src = $srcImage");
@@ -141,12 +171,12 @@ if (isset($sizes[$newWidth])) {
// Support width as % of original width
if ($newWidth[strlen($newWidth)-1] == '%') {
is_numeric(substr($newWidth, 0, -1))
or errorPage('Width % not numeric.');
is_numeric(substr($newWidth, 0, -1))
or errorPage('Width % not numeric.');
} else {
is_null($newWidth)
or ($newWidth > 10 && $newWidth <= $config['max_width'])
or errorPage('Width out of range.');
is_null($newWidth)
or ($newWidth > 10 && $newWidth <= $config['max_width'])
or errorPage('Width out of range.');
}
verbose("new width = $newWidth");
@@ -165,11 +195,11 @@ if (isset($sizes[$newHeight])) {
// height
if ($newHeight[strlen($newHeight)-1] == '%') {
is_numeric(substr($newHeight, 0, -1))
or errorPage('Height % out of range.');
is_numeric(substr($newHeight, 0, -1))
or errorPage('Height % out of range.');
} else {
is_null($newHeight)
or ($newHeight > 10 && $newHeight <= $config['max_height'])
is_null($newHeight)
or ($newHeight > 10 && $newHeight <= $config['max_height'])
or errorPage('Hight out of range.');
}
@@ -195,8 +225,8 @@ if ($negateAspectRatio) {
$aspectRatio = 1 / $aspectRatio;
}
is_null($aspectRatio)
or is_numeric($aspectRatio)
is_null($aspectRatio)
or is_numeric($aspectRatio)
or errorPage('Aspect ratio out of range');
verbose("aspect ratio = $aspectRatio");
@@ -262,8 +292,8 @@ verbose("use cache = $useCache");
*/
$quality = get(array('quality', 'q'));
is_null($quality)
or ($quality > 0 and $quality <= 100)
is_null($quality)
or ($quality > 0 and $quality <= 100)
or errorPage('Quality out of range');
verbose("quality = $quality");
@@ -276,8 +306,8 @@ verbose("quality = $quality");
$compress = get(array('compress', 'co'));
is_null($compress)
or ($compress > 0 and $compress <= 9)
is_null($compress)
or ($compress > 0 and $compress <= 9)
or errorPage('Compress out of range');
verbose("compress = $compress");
@@ -298,8 +328,8 @@ verbose("save as = $saveAs");
*/
$scale = get(array('scale', 's'));
is_null($scale)
or ($scale >= 0 and $quality <= 400)
is_null($scale)
or ($scale >= 0 and $scale <= 400)
or errorPage('Scale out of range');
verbose("scale = $scale");
@@ -342,19 +372,81 @@ verbose("blur = $blur");
/**
* rotate - Rotate the image with an angle, before processing
*/
/*
$rotate = get(array('rotate', 'r'));
is_null($rotate)
or ($rotate >= -360 and $rotate <= 360)
or errorPage('Rotate out of range');
verbose("rotate = $rotate");
*/
/**
* rotateBefore - Rotate the image with an angle, before processing
*/
$rotateBefore = get(array('rotateBefore', 'rb'));
is_null($rotateBefore)
or ($rotateBefore >= -360 and $rotateBefore <= 360)
or errorPage('RotateBefore out of range');
verbose("rotateBefore = $rotateBefore");
/**
* rotateAfter - Rotate the image with an angle, before processing
*/
$rotateAfter = get(array('rotateAfter', 'ra', 'rotate', 'r'));
is_null($rotateAfter)
or ($rotateAfter >= -360 and $rotateAfter <= 360)
or errorPage('RotateBefore out of range');
verbose("rotateAfter = $rotateAfter");
/**
* bgColor - Default background color to use
*/
$bgColor = hexdec(get(array('bgColor', 'bgc')));
is_null($bgColor)
or ($bgColor >= 0 and $bgColor <= hexdec("FFFFFF"))
or errorPage('Background color needs a hex value');
verbose("bgColor = $bgColor");
/**
* autoRotate - Auto rotate based on EXIF information
*/
$autoRotate = getDefined(array('autoRotate', 'aro'), true, false);
verbose("autoRotate = $autoRotate");
/**
* filter, f, f0-f9 - Processing option, post filter for various effects using imagefilter()
*/
$filters = array();
$filter = get(array('filter', 'f'));
if ($filter) {
$filters[] = $filter;
if ($filter) {
$filters[] = $filter;
}
for ($i = 0; $i < 10; $i++) {
$filter = get(array("filter{$i}", "f{$i}"));
if ($filter) {
$filters[] = $filter;
if ($filter) {
$filters[] = $filter;
}
}
@@ -373,11 +465,9 @@ if ($verbose) {
unset($query['nocache']);
unset($query['nc']);
$url1 = '?' . http_build_query($query);
$log = htmlentities(print_r(verbose(), 1));
echo <<<EOD
<a href=$url1><code>$url1</code></a><br>
<img src='{$url1}' />
<pre>$log</pre>
EOD;
}
@@ -391,29 +481,37 @@ require $config['cimage_class'];
$img = new CImage();
$img->setVerbose($verbose)
->log("Incoming arguments: " . print_r(verbose(), 1))
->setSource($srcImage, $config['image_path'])
->setOptions(
array(
// Options for calculate dimensions
'newWidth' => $newWidth,
'newHeight' => $newHeight,
'aspectRatio' => $aspectRatio,
'keepRatio' => $keepRatio,
'cropToFit' => $cropToFit,
'crop' => $crop,
'area' => $area,
// Options for calculate dimensions
'newWidth' => $newWidth,
'newHeight' => $newHeight,
'aspectRatio' => $aspectRatio,
'keepRatio' => $keepRatio,
'cropToFit' => $cropToFit,
'crop' => $crop,
'area' => $area,
// Pre-processing, before resizing is done
'scale' => $scale,
// Pre-processing, before resizing is done
'scale' => $scale,
'rotateBefore' => $rotateBefore,
// Post-processing, after resizing is done
'palette' => $palette,
'filters' => $filters,
'sharpen' => $sharpen,
'emboss' => $emboss,
'blur' => $blur,
// General processing options
'bgColor' => $bgColor,
// Post-processing, after resizing is done
'palette' => $palette,
'filters' => $filters,
'sharpen' => $sharpen,
'emboss' => $emboss,
'blur' => $blur,
'rotateAfter' => $rotateAfter,
'autoRotate' => $autoRotate,
)
)
->loadImageDetails()
->initDimensions()
->calculateNewWidthAndHeight()
->setSaveAsExtension($saveAs)

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 995 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
webroot/img/issue34/3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
webroot/img/issue34/4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
webroot/img/round8.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
webroot/img/wider.JPEG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
webroot/img/wider.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -17,6 +17,28 @@ return array(
/**
* Check that the imagefile is a file below 'image_path' using realpath().
*/
'image_path_constraint' => true,
/**
* A regexp for validating characters in the image filename.
*/
'valid_filename' => '#^[a-z0-9A-Z-/_\.]+$#',
/**
* Set default timezone, it defaults to UTC if not specified otherwise.
*
*/
//'default_timezone' => 'UTC',
/**
* Max image dimensions,
*
@@ -47,7 +69,7 @@ return array(
* Predefined size constants.
*
*/
'size_constant' => function() {
'size_constant' => function () {
// Set sizes to map constant to value, easier to use with width or height
$sizes = array(
@@ -55,13 +77,13 @@ return array(
'w2' => 630,
);
// Add column width to $area, useful for use as predefined size for width (or height).
// Add grid column width, useful for use as predefined size for width (or height).
$gridColumnWidth = 30;
$gridGutterWidth = 10;
$gridColumns = 24;
for ($i = 1; $i <= $gridColumns; $i++) {
$sizes['c' . $i] = ($gridColumnWidth + $gridGutterWidth) * $i - $gridGutterWidth;
$sizes['c' . $i] = ($gridColumnWidth + $gridGutterWidth) * $i - $gridGutterWidth;
}
return $sizes;
@@ -73,7 +95,7 @@ return array(
* Predefined aspect ratios.
*
*/
'aspect_ratio_constant' => function() {
'aspect_ratio_constant' => function () {
return array(
'3:1' => 3/1,
'3:2' => 3/2,
@@ -90,9 +112,11 @@ return array(
/**
* Set error reporting to match development or production environment
*/
'error_reporting' => function() {
error_reporting(-1);
'error_reporting' => function () {
error_reporting(-1); // Report all type of errors
ini_set('display_errors', 1); // Display all errors
ini_set('output_buffering', 0); // Do not buffer outputs, write directly
set_time_limit(20);
ini_set('gd.jpeg_ignore_warning', 1); // Ignore warning of corrupt jpegs
},
);

View File

@@ -5,25 +5,6 @@
</head>
<body>
<h1>Testing <code>CImage.php</code> through <code>img.php</code></h1>
<p>You can test any variation of resizing the images through <a href='img.php?src=wider.jpg&amp;w=200&amp;h=200'>img.php?src=wider.jpg&amp;w=200&amp;h=200</a> or <a href='img.php?src=higher.jpg&amp;w=200&amp;h=200'>img.php?src=higher.jpg&amp;w=200&amp;h=200</a></p>
<p>Supported arguments throught the querystring are:</p>
<ul>
<li>h, height: h=200 sets the new height to max 200px.
<li>w, width: w=200 sets the new width to max 200px.
<li>crop-to-fit: set together with both h & w to make the image fit in the box and crop out the rest.
<li>no-ratio: do not keep aspect ratio.
<li>crop: crops an area from the original image, set width, height, start_x and start_y to define the area to crop, for example crop=100,100,10,10.
<li>q, quality: q=70 or quality=70 sets the image quality as value between 0 and 100, default is full quality/100.
<li>f, filter: apply filter to image, f=colorize,0,255,0,0 makes image greener. Supports all filters as defined in <a href='http://php.net/manual/en/function.imagefilter.php'><code>imagefilter()</code></a>
<li>f0-f9: same as f/filter, just add more filters. Applied in order f, f0-f9.
</ul>
<p>Supports <code>.jpg</code>, <code>.png</code> and <code>.gif</code>.</p>
<p>Sourcecode and issues on github: <a href='https://github.com/mosbth/cimage'>https://github.com/mosbth/cimage</a></p>
<p>Copyright 2012, Mikael Roos (mos@dbwebb.se)</p>
<h2>Testcases</h2>
@@ -66,7 +47,7 @@ $testcase = array(
<tbody>
<?php
foreach($testcase as $key => $val) {
$url = "img.php?src=wider.jpg{$val['query']}";
$url = "../img.php?src=wider.jpg{$val['query']}";
echo "<tr><td id=w$key><a href=#w$key>$key</a></br>{$val['text']}</br><code><a href='$url'>".htmlentities($url)."</a></code></td><td><img src='$url' /></td></tr>";
}
?>
@@ -80,7 +61,7 @@ foreach($testcase as $key => $val) {
<tbody>
<?php
foreach($testcase as $key => $val) {
$url = "img.php?src=higher.jpg{$val['query']}";
$url = "../img.php?src=higher.jpg{$val['query']}";
echo "<tr><td id=h$key><a href=#h$key>$key</a></br>{$val['text']}</br><code><a href='$url'>".htmlentities($url)."</a></code></td><td><img src='$url' /></td></tr>";
}
?>

View File

@@ -0,0 +1,75 @@
<!doctype html>
<head>
<meta charset='utf-8'/>
<title>Testing img for issue 29</title>
<style>
body {background-color: #ccc;}
</style>
</head>
<body>
<h1>Testing issue 29</h1>
<?php
error_reporting(-1); // Report all type of errors
ini_set('display_errors', 1); // Display all errors
ini_set('output_buffering', 0); // Do not buffer outputs, write directly
echo "<p>Version of PHP is: " . phpversion();
$imgphp = "../img.php?src=";
$images = array(
'issue29/400x265.jpg',
'issue29/400x268.jpg',
'issue29/400x300.jpg',
'issue29/465x304.jpg',
'issue29/640x273.jpg',
);
$testcase = array(
'&w=300&cf&q=80&nc',
'&w=75&h=75&cf&q=80&nc',
'&w=75&h=75&q=80',
);
?>
<h2>Images used in test</h2>
<p>The following images are used for this test.</p>
<?php foreach($images as $image) : ?>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php endforeach; ?>
<h2>Testcases used for each image</h2>
<p>The following testcases are used for each image.</p>
<?php foreach($testcase as $tc) : ?>
<code><?=$tc?></code><br>
<?php endforeach; ?>
<h2>Applying testcase for each image</h2>
<?php foreach($images as $image) : ?>
<h3><?=$image?></h3>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php foreach($testcase as $tc) : ?>
<h4><?=$tc?></h4>
<p><code><a href="<?=$imgphp . $image . $tc?>"><?=$image . $tc?></a></code><br>
<img src="<?=$imgphp . $image . $tc?>"></p>
<?php endforeach; ?>
<?php endforeach; ?>

View File

@@ -0,0 +1,77 @@
<!doctype html>
<head>
<meta charset='utf-8'/>
<title>Testing img for issue 36 - autoRotate</title>
<style>
body {background-color: #ccc;}
</style>
</head>
<body>
<h1>Testing issue 36 - autoRotate</h1>
<?php
error_reporting(-1); // Report all type of errors
ini_set('display_errors', 1); // Display all errors
ini_set('output_buffering', 0); // Do not buffer outputs, write directly
$imgphp = "../img.php?src=";
$images = array(
'issue36/me-0.jpg',
'issue36/me-90.jpg',
'issue36/me-180.jpg',
'issue36/me-270.jpg',
'issue36/flower-0.jpg',
'issue36/flower-90.jpg',
'issue36/flower-180.jpg',
'issue36/flower-270.jpg',
);
$testcase = array(
'&aro&nc',
'&aro&nc&w=200',
'&aro&nc&h=200',
'&aro&nc&w=200&h=200&cf',
);
?>
<h2>Images used in test</h2>
<p>The following images are used for this test.</p>
<?php foreach($images as $image) : ?>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php endforeach; ?>
<h2>Testcases used for each image</h2>
<p>The following testcases are used for each image.</p>
<?php foreach($testcase as $tc) : ?>
<code><?=$tc?></code><br>
<?php endforeach; ?>
<h2>Applying testcase for each image</h2>
<?php foreach($images as $image) : ?>
<h3><?=$image?></h3>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php foreach($testcase as $tc) : ?>
<h4><?=$tc?></h4>
<p><code><a href="<?=$imgphp . $image . $tc?>"><?=$image . $tc?></a></code><br>
<img src="<?=$imgphp . $image . $tc?>"></p>
<?php endforeach; ?>
<?php endforeach; ?>

View File

@@ -0,0 +1,76 @@
<?php
$angle = 180;
?><!doctype html>
<head>
<meta charset='utf-8'/>
<title>Testing img for issue 36 - rotateBefore, rotateAfter <?=$angle?></title>
<style>
body {background-color: #ccc;}
</style>
</head>
<body>
<h1>Testing issue 36 - rotateBefore, rotateAfter <?=$angle?></h1>
<?php
error_reporting(-1); // Report all type of errors
ini_set('display_errors', 1); // Display all errors
ini_set('output_buffering', 0); // Do not buffer outputs, write directly
$imgphp = "../img.php?src=";
$images = array(
'kodim08.png',
'kodim04.png',
);
$testcase = array(
"&rb=$angle&nc",
"&rb=$angle&nc&w=200",
"&rb=$angle&nc&h=200",
"&rb=$angle&nc&w=200&h=200&cf",
"&ra=$angle&nc",
"&ra=$angle&nc&w=200",
"&ra=$angle&nc&h=200",
"&ra=$angle&nc&w=200&h=200&cf",
);
?>
<h2>Images used in test</h2>
<p>The following images are used for this test.</p>
<?php foreach($images as $image) : ?>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php endforeach; ?>
<h2>Testcases used for each image</h2>
<p>The following testcases are used for each image.</p>
<?php foreach($testcase as $tc) : ?>
<code><?=$tc?></code><br>
<?php endforeach; ?>
<h2>Applying testcase for each image</h2>
<?php foreach($images as $image) : ?>
<h3><?=$image?></h3>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php foreach($testcase as $tc) : ?>
<h4><?=$tc?></h4>
<p><code><a href="<?=$imgphp . $image . $tc?>"><?=$image . $tc?></a></code><br>
<img src="<?=$imgphp . $image . $tc?>"></p>
<?php endforeach; ?>
<?php endforeach; ?>

View File

@@ -0,0 +1,76 @@
<?php
$angle = 270;
?><!doctype html>
<head>
<meta charset='utf-8'/>
<title>Testing img for issue 36 - rotateBefore, rotateAfter <?=$angle?></title>
<style>
body {background-color: #ccc;}
</style>
</head>
<body>
<h1>Testing issue 36 - rotateBefore, rotateAfter <?=$angle?></h1>
<?php
error_reporting(-1); // Report all type of errors
ini_set('display_errors', 1); // Display all errors
ini_set('output_buffering', 0); // Do not buffer outputs, write directly
$imgphp = "../img.php?src=";
$images = array(
'kodim08.png',
'kodim04.png',
);
$testcase = array(
"&rb=$angle&nc",
"&rb=$angle&nc&w=200",
"&rb=$angle&nc&h=200",
"&rb=$angle&nc&w=200&h=200&cf",
"&ra=$angle&nc",
"&ra=$angle&nc&w=200",
"&ra=$angle&nc&h=200",
"&ra=$angle&nc&w=200&h=200&cf",
);
?>
<h2>Images used in test</h2>
<p>The following images are used for this test.</p>
<?php foreach($images as $image) : ?>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php endforeach; ?>
<h2>Testcases used for each image</h2>
<p>The following testcases are used for each image.</p>
<?php foreach($testcase as $tc) : ?>
<code><?=$tc?></code><br>
<?php endforeach; ?>
<h2>Applying testcase for each image</h2>
<?php foreach($images as $image) : ?>
<h3><?=$image?></h3>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php foreach($testcase as $tc) : ?>
<h4><?=$tc?></h4>
<p><code><a href="<?=$imgphp . $image . $tc?>"><?=$image . $tc?></a></code><br>
<img src="<?=$imgphp . $image . $tc?>"></p>
<?php endforeach; ?>
<?php endforeach; ?>

View File

@@ -0,0 +1,78 @@
<?php
$angle = 45;
?><!doctype html>
<head>
<meta charset='utf-8'/>
<title>Testing img for issue 36 - rotateBefore, rotateAfter <?=$angle?></title>
<style>
body {background-color: #ccc;}
</style>
</head>
<body>
<h1>Testing issue 36 - rotateBefore, rotateAfter <?=$angle?></h1>
<?php
error_reporting(-1); // Report all type of errors
ini_set('display_errors', 1); // Display all errors
ini_set('output_buffering', 0); // Do not buffer outputs, write directly
$imgphp = "../img.php?src=";
$images = array(
'kodim08.png',
'kodim04.png',
);
$testcase = array(
"&rb=$angle&bgc=ffffff&nc",
"&rb=$angle&bgc=ffffff&nc&w=200",
"&rb=$angle&bgc=ffffff&nc&h=200",
"&rb=$angle&bgc=ffffff&nc&w=200&h=200&cf",
"&rb=$angle&bgc=ffffff&nc&w=200&h=200&cf&crop=200,200,center,center",
"&ra=$angle&bgc=ffffff&nc",
"&ra=$angle&bgc=ffffff&nc&w=200",
"&ra=$angle&bgc=ffffff&nc&h=200",
"&ra=$angle&bgc=ffffff&nc&w=200&h=200&cf",
"&ra=$angle&bgc=ffffff&nc&w=200&h=200&cf&crop=200,200,center,center",
);
?>
<h2>Images used in test</h2>
<p>The following images are used for this test.</p>
<?php foreach($images as $image) : ?>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php endforeach; ?>
<h2>Testcases used for each image</h2>
<p>The following testcases are used for each image.</p>
<?php foreach($testcase as $tc) : ?>
<code><?=$tc?></code><br>
<?php endforeach; ?>
<h2>Applying testcase for each image</h2>
<?php foreach($images as $image) : ?>
<h3><?=$image?></h3>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php foreach($testcase as $tc) : ?>
<h4><?=$tc?></h4>
<p><code><a href="<?=$imgphp . $image . $tc?>"><?=$image . $tc?></a></code><br>
<img src="<?=$imgphp . $image . $tc?>"></p>
<?php endforeach; ?>
<?php endforeach; ?>

View File

@@ -0,0 +1,76 @@
<?php
$angle = 90;
?><!doctype html>
<head>
<meta charset='utf-8'/>
<title>Testing img for issue 36 - rotateBefore, rotateAfter <?=$angle?></title>
<style>
body {background-color: #ccc;}
</style>
</head>
<body>
<h1>Testing issue 36 - rotateBefore, rotateAfter <?=$angle?></h1>
<?php
error_reporting(-1); // Report all type of errors
ini_set('display_errors', 1); // Display all errors
ini_set('output_buffering', 0); // Do not buffer outputs, write directly
$imgphp = "../img.php?src=";
$images = array(
'kodim08.png',
'kodim04.png',
);
$testcase = array(
"&rb=$angle&nc",
"&rb=$angle&nc&w=200",
"&rb=$angle&nc&h=200",
"&rb=$angle&nc&w=200&h=200&cf",
"&ra=$angle&nc",
"&ra=$angle&nc&w=200",
"&ra=$angle&nc&h=200",
"&ra=$angle&nc&w=200&h=200&cf",
);
?>
<h2>Images used in test</h2>
<p>The following images are used for this test.</p>
<?php foreach($images as $image) : ?>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php endforeach; ?>
<h2>Testcases used for each image</h2>
<p>The following testcases are used for each image.</p>
<?php foreach($testcase as $tc) : ?>
<code><?=$tc?></code><br>
<?php endforeach; ?>
<h2>Applying testcase for each image</h2>
<?php foreach($images as $image) : ?>
<h3><?=$image?></h3>
<p><code><a href="img/<?=$image?>"><?=$image?></a></code><br>
<img src="<?=$imgphp . $image?>"></p>
<?php foreach($testcase as $tc) : ?>
<h4><?=$tc?></h4>
<p><code><a href="<?=$imgphp . $image . $tc?>"><?=$image . $tc?></a></code><br>
<img src="<?=$imgphp . $image . $tc?>"></p>
<?php endforeach; ?>
<?php endforeach; ?>