PDA

View Full Version : Archived: Automatic Image Rotator


Craigslist.org
04-14-2009, 01:05 AM
With this script you can put a bunch of pics in a folder and this will randomly display them just insert wherever you want it to show up in your webpage. It supports jpg, png, gif and html.

Just save the following code as rotate.php and put it in the same folder where you keep the images. (remember to keep the images the same dimensions or it will look weird)
Put this wherever you want it on your page, this is where all the pics in your folder will show up.:)

<img src="http://yourwebsite.com/images/banners/rotate.php">
Save the below code as rotate.php and upload it to your server.

<?php

/*

AUTOMATIC IMAGE ROTATOR
Version 2.2 - December 4, 2003
Copyright (c) 2002-2003 Dan P. Benjamin, Automatic, Ltd.
All Rights Reserved.

http://www.hiveware.com/imagerotator.php

http://www.automaticlabs.com/


DISCLAIMER
Automatic, Ltd. makes no representations or warranties about
the suitability of the software, either express or
implied, including but not limited to the implied
warranties of merchantability, fitness for a particular
purpose, or non-infringement. Dan P. Benjamin and Automatic, Ltd.
shall not be liable for any damages suffered by licensee
as a result of using, modifying or distributing this
software or its derivatives.


ABOUT
This PHP script will randomly select an image file from a
folder of images on your webserver. You can then link to it
as you would any standard image file and you'll see a random
image each time you reload.

When you want to add or remove images from the rotation-pool,
just add or remove them from the image rotation folder.


VERSION CHANGES
Version 1.0
- Release version

Version 1.5
- Tweaked a few boring bugs

Version 2.0
- Complete rewrite from the ground-up
- Made it clearer where to make modifications
- Made it easier to specify/change the rotation-folder
- Made it easier to specify/change supported image types
- Wrote better instructions and info (you're them reading now)
- Significant speed improvements
- More error checking
- Cleaner code (albeit more PHP-specific)
- Better/faster random number generation and file-type parsing
- Added a feature where the image to display can be specified
- Added a cool feature where, if an error occurs (such as no
images being found in the specified folder) *and* you're
lucky enough to have the GD libraries compiled into PHP on
your webserver, we generate a replacement "error image" on
the fly.

Version 2.1
- Updated a potential security flaw when value-matching
filenames

Version 2.2
- Updated a few more potential security issues
- Optimized the code a bit.
- Expanded the doc for adding new mime/image types.

Thanks to faithful ALA reader Justin Greer for
lots of good tips and solid code contribution!


INSTRUCTIONS
1. Modify the $folder setting in the configuration section below.
2. Add image types if needed (most users can ignore that part).
3. Upload this file (rotate.php) to your webserver. I recommend
uploading it to the same folder as your images.
4. Link to the file as you would any normal image file, like this:

<img src="http://example.com/rotate.php">

5. You can also specify the image to display like this:

<img src="http://example.com/rotate.php?img=gorilla.jpg">

This would specify that an image named "gorilla.jpg" located
in the image-rotation folder should be displayed.

That's it, you're done.

*/




/* ------------------------- CONFIGURATION -----------------------


Set $folder to the full path to the location of your images.
For example: $folder = '/user/me/example.com/images/';
If the rotate.php file will be in the same folder as your
images then you should leave it set to $folder = '.';

*/


$folder = '.';


/*

Most users can safely ignore this part. If you're a programmer,
keep reading, if not, you're done. Go get some coffee.

If you'd like to enable additional image types other than
gif, jpg, and png, add a duplicate line to the section below
for the new image type.

Add the new file-type, single-quoted, inside brackets.

Add the mime-type to be sent to the browser, also single-quoted,
after the equal sign.

For example:

PDF Files:

$extList['pdf'] = 'application/pdf';

CSS Files:

$extList['css'] = 'text/css';

You can even serve up random HTML files:

$extList['html'] = 'text/html';
$extList['htm'] = 'text/html';

Just be sure your mime-type definition is correct!

*/

$extList = array();
$extList['gif'] = 'image/gif';
$extList['jpg'] = 'image/jpeg';
$extList['jpeg'] = 'image/jpeg';
$extList['png'] = 'image/png';


// You don't need to edit anything after this point.


// --------------------- END CONFIGURATION -----------------------

$img = null;

if (substr($folder,-1) != '/') {
$folder = $folder.'/';
}

if (isset($_GET['img'])) {
$imageInfo = pathinfo($_GET['img']);
if (
isset( $extList[ strtolower( $imageInfo['extension'] ) ] ) &&
file_exists( $folder.$imageInfo['basename'] )
) {
$img = $folder.$imageInfo['basename'];
}
} else {
$fileList = array();
$handle = opendir($folder);
while ( false !== ( $file = readdir($handle) ) ) {
$file_info = pathinfo($file);
if (
isset( $extList[ strtolower( $file_info['extension'] ) ] )
) {
$fileList[] = $file;
}
}
closedir($handle);

if (count($fileList) > 0) {
$imageNumber = time() % count($fileList);
$img = $folder.$fileList[$imageNumber];
}
}

if ($img!=null) {
$imageInfo = pathinfo($img);
$contentType = 'Content-type: '.$extList[ $imageInfo['extension'] ];
header ($contentType);
readfile($img);
} else {
if ( function_exists('imagecreate') ) {
header ("Content-type: image/png");
$im = @imagecreate (100, 100)
or die ("Cannot initialize new GD image stream");
$background_color = imagecolorallocate ($im, 255, 255, 255);
$text_color = imagecolorallocate ($im, 0,0,0);
imagestring ($im, 2, 5, 5, "IMAGE ERROR", $text_color);
imagepng ($im);
imagedestroy($im);
}
}

?>

Clover
04-14-2009, 07:22 PM
Could be done much cleaner. If you're gonna use it for rotating ads or banners, I'd suggest just naming them numerically as in 1.png, 2.png and so forth. Then for the HTML to display them, just do:


<img src="http://site.com/images/<?php echo(rand(1,8)); ?>.png" />


That'd be very bare bones, but it should work efficiently. If it's random dynamic content, then of course this wouldn't be practical. I've got a library of all sorts of image functions for PHP that I was using for a CMS. Maybe I'll post some and we can compare notes :thumbsup:.

Craigslist.org
04-14-2009, 09:39 PM
Could be done much cleaner. If you're gonna use it for rotating ads or banners, I'd suggest just naming them numerically as in 1.png, 2.png and so forth. Then for the HTML to display them, just do:


<img src="http://site.com/images/<?php echo(rand(1,8)); ?>.png" />


That'd be very bare bones, but it should work efficiently. If it's random dynamic content, then of course this wouldn't be practical. I've got a library of all sorts of image functions for PHP that I was using for a CMS. Maybe I'll post some and we can compare notes :thumbsup:.

Sounds interesting. This isnt my code though, just some code I used a while ago but I couldnt figure out how to link to the sites for the ads so I started using Openx.:D

Clover
04-14-2009, 11:17 PM
Here is a script that I wrote, used to resize and watermark an image with watermark of your choice (both options can be used optionally, just specifying an image will just echo the image though). If you go through and read the commented lines, you can adjust where the watermark is placed.


<?php
/*image resizer and watermarker written by slpctrl.

1. Specify the image, width and height using w and h as GET variables
2. Specify the image alone and let it scale it at it's default 320x240
3. Specify image and percent by which to scale it
4. Specify either w or h and let the script calculate the other dimension

supports JPEG PNG and GIF images

Use: Place in web server with watermark of your choice (watermark.png) in the
same directory. Then you append all the other variables in the URL bar with GET
variables. A list of them are:

w = width
h = height
image = image
p = percent (.25 is 25 percent, 1 is 100 and so forth)
*/

//begin function
function sizemark($image, $w, $h)
{
header("Content-type: image/jpeg");
//retrieving the dimensions of image
$x = @getimagesize($image);
$sw = $x[0];
$sh = $x[1];
//setting the new drawn image as a $new variable based on it's file type
$new = @ImageCreateFromJPEG($image) or
$new = @ImageCreateFromPNG($image) or
$new = @ImageCreateFromGIF($image) or
$new = false;
if(!$new)
{
readfile($new);
}
else
{
//Here are the GD library functions in use where we take the image, rescale,
//get coordinates for watermark and all the other nice details and merge the
//watermark in the center of the scaled image and return the new image
$thumb = @ImageCreateTrueColor($w, $h);
@ImageCopyResampled($thumb, $new, 0, 0, 0, 0, $w, $h, $sw, $sh);
$image = $thumb;
$watermark = imagecreatefrompng('watermark.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$dest_x = (imagesx($image) - $watermark_width)/2;
//$dest_x = (imagesx($image) - $watermark_width) - 5;
//The above line, uncommented will put the watermark in the bottom corner
$dest_y = (imagesy($image) - $watermark_height)/2;
//$dest_y = (imagesy($image) - $watermark_height) - 5;
//same as above
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width,
$watermark_height, 30);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
return $image;
}
return false;
}
//end function
//variable setting
$image = $_GET['image'];
$w = $_GET['w'];
$h = $_GET['h'];
$p = $_GET['p'];
$x = @getimagesize($image);
$sw = $x[0] * $p;
$sh = $x[1] * $p;
//check to see if image and percent are set and calculate the new dimensions
//based on the percentage given
if(isset($p) && empty($w) && empty($h))
sizemark($image,$sw,$sh);
//check to see if image and dimensions of thumbnail are to be set
elseif(isset($w) && isset($h))
sizemark($image,$w,$h);
//check to see if only image and width are set, calculates height
elseif(isset($w) && empty($h))
{
$h1 = ($w/$x[0]) * $x[1];
sizemark($image,$w,$h1);
}
//check to see if only image and height are set, calculates width
elseif(isset($h) && empty($w))
{
$w1 = $x[0] * ($h/$x[1]);
sizemark($image,$w1,$h);
}
elseif(empty($w) && empty($h) && empty($p))
sizemark($image,$x[0]*.5,$x[1]*.5)
?>


:thumbsup: