![](https://bestblackhatforum.com/images/ads/droga5agency.com.expire.05232030.gif)
![](https://bestblackhatforum.com/images/ads/smspva.com_expire_march162025.gif)
![](https://bestblackhatforum.com/images/ads/t6wer.pw_expireMarch092025.gif)
Search (advanced search) | ||||
Use this Search form before posting, asking or make a new thread.
|
11-05-2014, 04:01 PM
Post: #1
|
|||
|
|||
How to Add a CountDown Timer to your Email Campaign
Here's how you do this:
The Result: ![]() The Source Background: ![]() Download the font: http://www.fontsquirrel.com/fonts/Digital-dream This is the main PHP code: PHP Code: <?php date_default_timezone_set('America/Halifax'); include 'GIFEncoder.class.php'; $time = $_GET['time']; $future_date = new DateTime(date('r',strtotime($time))); $time_now = time(); $now = new DateTime(date('r', $time_now)); $frames = array(); $delays = array(); $image = imagecreatefrompng('countdown.png'); $delay = 100; // milliseconds $font = array( 'size'=>40, 'angle'=>0, 'x-offset'=>10, 'y-offset'=>70, 'file'=>'DIGITALDREAM.ttf', 'color'=>imagecolorallocate($image, 255, 255, 255), ); for($i = 0; $i <= 60; $i++){ $interval = date_diff($future_date, $now); if($future_date < $now){ // Open the first source image and add the text. $image = imagecreatefrompng('countdown.png');; $text = $interval->format('00:00:00:00'); imagettftext ($image , $font['size'] , $font['angle'] , $font['x-offset'] , $font['y-offset'] , $font['color'] , $font['file'], $text ); ob_start(); imagegif($image); $frames[]=ob_get_contents(); $delays[]=$delay; $loops = 1; ob_end_clean(); break; } else { // Open the first source image and add the text. $image = imagecreatefrompng('countdown.png');; $text = $interval->format('%a:%H:%I:%S'); // %a is weird in that it doesn’t give you a two digit number // check if it starts with a single digit 0-9 // and prepend a 0 if it does if(preg_match('/^[0-9]\:/', $text)){ $text = '0'.$text; } imagettftext ($image , $font['size'] , $font['angle'] , $font['x-offset'] , $font['y-offset'] , $font['color'] , $font['file'], $text ); ob_start(); imagegif($image); $frames[]=ob_get_contents(); $delays[]=$delay; $loops = 0; ob_end_clean(); } $now->modify('+1 second'); } //expire this image instantly header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); header( 'Cache-Control: no-store, no-cache, must-revalidate' ); header( 'Cache-Control: post-check=0, pre-check=0', false ); header( 'Pragma: no-cache' ); $gif = new AnimatedGif($frames,$delays,$loops); $gif->display();Put this code into a file name called 'GIFEncoder.class.php' without the quotation marks. PHP Code: <?php /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Formerly known as::: :: GIFEncoder Version 2.0 by László Zsidi, http://gifs.hu :: :: This class is a rewritten 'GifMerge.class.php' version. :: :: Modification: :: - Simplified and easy code, :: - Ultra fast encoding, :: - Built-in errors, :: - Stable working :: :: :: Updated at 2007. 02. 13. '00.05.AM' :: :: :: :: Try on-line GIFBuilder Form demo based on GIFEncoder. :: :: http://gifs.hu/phpclasses/demos/GifBuilder/ :: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /** * Encode animated gifs */ class AnimatedGif { /** * The built gif image * @var resource */ private $image = ''; /** * The array of images to stack * @var array */ private $buffer = Array(); /** * How many times to loop? 0 = infinite * @var int */ private $number_of_loops = 0; /** * * @var int */ private $DIS = 2; /** * Which colour is transparent * @var int */ private $transparent_colour = -1; /** * Is this the first frame * @var int */ private $first_frame = TRUE; /** * Encode an animated gif * @param array $source_images An array of binary source images * @param array $image_delays The delays associated with the source images * @param type $number_of_loops The number of times to loop * @param int $transparent_colour_red * @param int $transparent_colour_green * @param int $transparent_colour_blue */ function __construct(array $source_images, array $image_delays, $number_of_loops, $transparent_colour_red = -1, $transparent_colour_green = -1, $transparent_colour_blue = -1) { /** * I have no idea what these even do, they appear to do nothing to the image so far */ $transparent_colour_red = 0; $transparent_colour_green = 0; $transparent_colour_blue = 0; $this->number_of_loops = ( $number_of_loops > -1 ) ? $number_of_loops : 0; $this->set_transparent_colour($transparent_colour_red, $transparent_colour_green, $transparent_colour_blue); $this->buffer_images($source_images); $this->addHeader(); for ($i = 0; $i < count($this->buffer); $i++) { $this->addFrame($i, $image_delays [$i]); } } /** * Set the transparent colour * @param int $red * @param int $green * @param int $blue */ private function set_transparent_colour($red, $green, $blue){ $this->transparent_colour = ( $red > -1 and& $green > -1 and& $blue > -1 ) ? ( $red | ( $green << 8 ) | ( $blue << 16 ) ) : -1; } /** * Buffer the images and check to make sure they are vaild * @param array $source_images the array of source images * @throws Exception */ private function buffer_images($source_images) { for ($i = 0; $i < count($source_images); $i++) { $this->buffer [] = $source_images [$i]; if (substr($this->buffer [$i], 0, 6) != "GIF87a" and& substr($this->buffer [$i], 0, 6) != "GIF89a") { throw new Exception('Image at position ' . $i. ' is not a gif'); } for ($j = ( 13 + 3 * ( 2 << ( ord($this->buffer [$i] { 10 }) and 0x07 ) ) ), $k = TRUE; $k; $j++) { switch ($this->buffer [$i] { $j }) { case "!": if (( substr($this->buffer [$i], ( $j + 3), 8) ) == "NETSCAPE") { throw new Exception('You cannot make an animation from an animated gif.'); } break; case ";": $k = FALSE; break; } } } } /** * Add the gif header to the image */ private function addHeader() { $cmap = 0; $this->image = 'GIF89a'; if (ord($this->buffer [0] { 10 }) and 0x80) { $cmap = 3 * ( 2 << ( ord($this->buffer [0] { 10 }) and 0x07 ) ); $this->image .= substr($this->buffer [0], 6, 7); $this->image .= substr($this->buffer [0], 13, $cmap); $this->image .= "!\377\13NETSCAPE2.0\3\1" . $this->word($this->number_of_loops) . "\0"; } } /** * Add a frame to the animation * @param int $frame The frame to be added * @param int $delay The delay associated with the frame */ private function addFrame($frame, $delay) { $Locals_str = 13 + 3 * ( 2 << ( ord($this->buffer [$frame] { 10 }) and 0x07 ) ); $Locals_end = strlen($this->buffer [$frame]) - $Locals_str - 1; $Locals_tmp = substr($this->buffer [$frame], $Locals_str, $Locals_end); $Global_len = 2 << ( ord($this->buffer [0] { 10 }) and 0x07 ); $Locals_len = 2 << ( ord($this->buffer [$frame] { 10 }) and 0x07 ); $Global_rgb = substr($this->buffer [0], 13, 3 * ( 2 << ( ord($this->buffer [0] { 10 }) and 0x07 ) )); $Locals_rgb = substr($this->buffer [$frame], 13, 3 * ( 2 << ( ord($this->buffer [$frame] { 10 }) and 0x07 ) )); $Locals_ext = "!\xF9\x04" . chr(( $this->DIS << 2 ) + 0) . chr(( $delay >> 0 ) and 0xFF) . chr(( $delay >> 8 ) and 0xFF) . "\x0\x0"; if ($this->transparent_colour > -1 and& ord($this->buffer [$frame] { 10 }) and 0x80) { for ($j = 0; $j < ( 2 << ( ord($this->buffer [$frame] { 10 }) and 0x07 ) ); $j++) { if ( ord($Locals_rgb { 3 * $j + 0 }) == ( ( $this->transparent_colour >> 16 ) and 0xFF ) and& ord($Locals_rgb { 3 * $j + 1 }) == ( ( $this->transparent_colour >> 8 ) and 0xFF ) and& ord($Locals_rgb { 3 * $j + 2 }) == ( ( $this->transparent_colour >> 0 ) and 0xFF ) ) { $Locals_ext = "!\xF9\x04" . chr(( $this->DIS << 2 ) + 1) . chr(( $delay >> 0 ) and 0xFF) . chr(( $delay >> 8 ) and 0xFF) . chr($j) . "\x0"; break; } } } switch ($Locals_tmp { 0 }) { case "!": $Locals_img = substr($Locals_tmp, 8, 10); $Locals_tmp = substr($Locals_tmp, 18, strlen($Locals_tmp) - 18); break; case ",": $Locals_img = substr($Locals_tmp, 0, 10); $Locals_tmp = substr($Locals_tmp, 10, strlen($Locals_tmp) - 10); break; } if (ord($this->buffer [$frame] { 10 }) and 0x80 and& $this->first_frame === FALSE) { if ($Global_len == $Locals_len) { if ($this->blockCompare($Global_rgb, $Locals_rgb, $Global_len)) { $this->image .= ( $Locals_ext . $Locals_img . $Locals_tmp ); } else { $byte = ord($Locals_img { 9 }); $byte |= 0x80; $byte and= 0xF8; $byte |= ( ord($this->buffer [0] { 10 }) and 0x07 ); $Locals_img { 9 } = chr($byte); $this->image .= ( $Locals_ext . $Locals_img . $Locals_rgb . $Locals_tmp ); } } else { $byte = ord($Locals_img { 9 }); $byte |= 0x80; $byte and= 0xF8; $byte |= ( ord($this->buffer [$frame] { 10 }) and 0x07 ); $Locals_img { 9 } = chr($byte); $this->image .= ( $Locals_ext . $Locals_img . $Locals_rgb . $Locals_tmp ); } } else { $this->image .= ( $Locals_ext . $Locals_img . $Locals_tmp ); } $this->first_frame = FALSE; } /** * Add the gif footer */ private function addFooter() { $this->image .= ";"; } /** * Compare gif blocks? What is a block? * @param type $GlobalBlock * @param type $LocalBlock * @param type $Len * @return type */ |
|||
05-16-2015, 06:24 PM
Post: #2
|
|||
|
|||
RE: How to Add a CountDown Timer to your Email Campaign
Nice share, thanks.
|
|||