<?php
/**
 * @copyright	Copyright (c) 2013 Skyline Technology Ltd (http://extstore.com). All rights reserved.
 * @license		http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
 */

// No direct access.
defined('_JEXEC') or die;

class GDEnhancerGIFSplit {

	public $frames;
	protected $gif;

	public function __construct($fileobject) {
		$this->setGIF($fileobject);
		$this->setFrames();
	}

	protected function setGIF($fileobject) {
		include_once 'GIFParse.php';
		$this->gif = new GDEnhancerGIFParse($fileobject, true);
	}

	protected function setFrames() {
		foreach ($this->gif->frames as $framekey => $frame) {
			$contents = "\x47\x49\x46\x38\x39\x61";
			$contents .= $this->gif->logicalscreendescriptor;
			if ($this->gif->globalcolortableflag === '1') {
				$contents .= $this->gif->globalcolortable;
			}
			$contents .= $frame['graphiccontrolextension'];
			$contents .= $frame['imagedescriptor'];
			if ($frame['localcolortableflag'] === '1') {
				$contents .= $frame['localcolortable'];
			}
			$contents .= $frame['imagedata'];
			$contents .= "\x3B";
			$oldimage = @imagecreatefromstring($contents);
			if ($oldimage === false) {
				throw new \exception('Malformed GIF');
			}
			$width = GDEnhancerLibrary::getUnsignedShortFromBinaryString($this->gif->logicalscreenwidth);
			$height = GDEnhancerLibrary::getUnsignedShortFromBinaryString($this->gif->logicalscreenheight);
			$newimage = imagecreatetruecolor($width, $height);
			$transparentcolorindex = imagecolorallocatealpha($newimage, 225, 225, 225, 127);
			imagefill($newimage, 0, 0, $transparentcolorindex);
			imagecolortransparent($newimage, $transparentcolorindex);
			$dst_x = GDEnhancerLibrary::getUnsignedShortFromBinaryString($frame['leftposition']);
			$dst_y = GDEnhancerLibrary::getUnsignedShortFromBinaryString($frame['topposition']);
			$src_w = GDEnhancerLibrary::getUnsignedShortFromBinaryString($frame['width']);
			$src_h = GDEnhancerLibrary::getUnsignedShortFromBinaryString($frame['height']);
			imagecopy($newimage, $oldimage, $dst_x, $dst_y, 0, 0, $src_w, $src_h);
			$this->frames[$framekey]['resource'] = $newimage;
			imagedestroy($oldimage);
			$this->frames[$framekey]['delaytime'] = $frame['delaytime'];
			$this->frames[$framekey]['disposalmethod'] = $frame['disposalmethod'];
		}
	}

}