_bin = fread($handle, filesize($path)); fclose($handle); } /** * @desc Load a bin picture from a base64 */ public function fromBase($base = false) { if($base) { $this->_bin = (string)base64_decode((string)$base); } } /** * @desc Convert to a base64 */ public function toBase() { if($this->_bin) return base64_encode($this->_bin); else return false; } /** * @desc Get a picture of the current size * @param $key The key of the picture * @param $size The size requested * @return The url of the picture */ public function get($key, $size = false) { $this->_key = $key; $original = $this->_path.md5($this->_key).'.jpg'; // We request the original picture if($size == false) { if(file_exists($original)) { $this->fromPath($original); return $this->_uri.md5($this->_key).'.jpg'; } else { return false; } // We request a specific size } else { if(file_exists($this->_path.md5($this->_key).'_'.$size.'.jpg')) { $this->fromPath($this->_path.md5($this->_key).'_'.$size.'.jpg'); return $this->_uri.md5($this->_key).'_'.$size.'.jpg'; } else { if(file_exists($original)) { $this->fromPath($original); $this->createThumbnail($size); return $this->_uri.md5($this->_key).'_'.$size.'.jpg'; } else { return false; } } } } /** * @desc Save a picture (original size) * @param $key The key of the picture */ public function set($key) { $this->_key = $key; $path = $this->_path.md5($this->_key).'.jpg'; // If the file exist we replace it if(file_exists($path) && $this->_bin) { unlink($path); // And destroy all the thumbnails foreach( glob( $this->_path. md5($key). '*.jpg', GLOB_NOSORT ) as $path_thumb) { unlink($path_thumb); } } if($this->_bin) { $source = imagecreatefromstring($this->_bin); if($source != false) { imagejpeg($source, $path, 95); imagedestroy($source); } } } /** * @desc Create a thumbnail of the picture and save it * @param $size The size requested */ private function createThumbnail($size) { $path = $this->_path.md5($this->_key).'_'.$size.'.jpg'; $thumb = imagecreatetruecolor($size, $size); $white = imagecolorallocate($thumb, 255, 255, 255); imagefill($thumb, 0, 0, $white); imageinterlace($thumb, true); $source = imagecreatefromstring($this->_bin); $width = imagesx($source); $height = imagesy($source); if($width >= $height) { // For landscape images $x_offset = ($width - $height) / 2; $y_offset = 0; $square_size = $width - ($x_offset * 2); } else { // For portrait and square images $x_offset = 0; $y_offset = ($height - $width) / 2; $square_size = $height - ($y_offset * 2); } if($source) { imagecopyresampled($thumb, $source, 0, 0, $x_offset, $y_offset, $size, $size, $square_size, $square_size); imagejpeg($thumb, $path, 95); imagedestroy($thumb); } } }