<?php
//******************************************************************************************************
// Name: image.php
// Revision: 1.3
// Date: May 19, 2009
// Link: http://doc776.org
// Developer: Mikhail Davtian
// Description: Class - Image manipulation and presentation from database.
// Dependancy: sql.php
//******************************************************************************************************
class Image {
var $db; //mysql class, please add this after loading Image class if using fetch() or register()
var $table = 'pix';
var $fields = array('id' => 'image_id', 'blob' => 'image_blob', 'type' => 'image_type', 'size' => 'image_size', 'hash' => 'image_hash'); //database fields
var $tempdir = 'tmp/'; //temporary directory for converting image binary data
var $data = null; //file data
var $image = null; //GD resource
var $gd = false; //is GD currently in use and resource available
var $op = false; //is image data currenty opened and available
var $error = null; //error id if any created
function show($image_type = null) {
if($this->op) {
if($this->gd)
$this->output($image_type);
else {
header('Content-Type: '.$this->data->image_type);
echo $this->data->image_blob;
}
}
}
function fetch($id = 0) {
$this->data = $this->db->data($this->db->query("select * from `{$this->table}` where `image_id`='{$id}' limit 1"),2);
$this->op = true;
}
function load() {
if($this->op){
$this->image = imagecreatefromstring($this->data->image_blob);
if(!empty($this->image)){
$this->gd = true;
return true;
}
else{
$this->gd = false;
$this->error = 5;
return false;
}
}
}
function unload(){
if($this->gd){
$this->image = null;
$this->gd = false;
}
}
function open($path = ''){
if(is_file($path)){
$image_type = getimagesize($path);
$this->data->image_type = $image_type['mime'];
$this->data->image_size = filesize($path);
$this->data->image_blob = file_get_contents($path);
$this->data->image_id = null;
$this->data->image_hash = md5_file($path);
$this->op = true;
}
}
function destroy(){
$this->image = null;
$this->data = null;
$this->gd = null;
$this->op = null;
$this->error = null;
}
function register(){
if($this->op){
if($this->db->num($this->db->query("select null from `{$this->table}` where `image_hash`='{$this->data->image_hash}' limit 1")) == 0) {
$this->data->image_blob = $this->db->prot($this->data->image_blob);
$fields = "`{$this->fields['id']}`, `{$this->fields['blob']}`, `{$this->fields['type']}`, `{$this->fields['size']}`, `{$this->fields['hash']}`";
$values = "null, '{$this->data->image_blob}', '{$this->data->image_type}', '{$this->data->image_size}', '{$this->data->image_hash}'";
if($this->db->query("insert into `{$this->table}` ($fields) values($values)"))
return true;
else {
$this->error = 3;
return false;
}
} else {
$this->error = 2;
return false;
}
} else {
$this->error = 1;
return false;
}
}
function convert($image_type){
if($image_type != $this->data->image_type){
if($this->gd){
$f = time().rand(0,9999);
if($image_type == 'image/jpeg')
imagejpeg($this->image, $this->tempdir.$f);
elseif($image_type == 'image/gif')
imagegif($this->image, $this->tempdir.$f);
elseif($image_type == 'image/png')
imagepng($this->image, $this->tempdir.$f);
if(is_file($this->tempdir.$f)){
$this->open($this->tempdir.$f);
$this->load();
unlink($this->tempdir.$f);
return true;
}
else{
$this->error = 4;
return false;
}
}
}
}
function save($filename, $image_type=null, $permissions=null) {
if($image_type == null) $image_type = $this->data->image_type;
if($image_type == $this->data->image_type && !$this->gd){
if($image_type == 'image/jpeg')
$ext = '.jpg';
elseif($image_type == 'image/gif')
$ext = '.gif';
elseif($image_type == 'image/png')
$ext = '.png';
file_put_contents($filename.$ext, $this->data->image_blob);
}
else{
if(!$this->gd) $this->load();
if($image_type == 'image/jpeg')
imagejpeg($this->image,$filename,100);
elseif($image_type == 'image/gif')
imagegif($this->image,$filename);
elseif($image_type == 'image/png')
imagepng($this->image,$filename);
}
if($permissions != null)
chmod($filename,$permissions);
}
function output($image_type=null) {
if($this->gd)
{
if(empty($image_type)) $image_type = $this->data->image_type;
header('Content-Type: '.$image_type);
if( $image_type == 'image/jpeg' )
imagejpeg($this->image);
elseif( $image_type == 'image/gif' )
imagegif($this->image);
elseif( $image_type == 'image/png' )
imagepng($this->image);
}
}
function getwidth() {
if($this->gd)
return imagesx($this->image);
}
function getheight() {
if($this->gd)
return imagesy($this->image);
}
function resizetoheight($height) {
if($this->gd){
$ratio = $height / $this->getheight();
$width = $this->getwidth() * $ratio;
$this->resize($width,$height);
}
}
function resizetowidth($width) {
if($this->gd){
$ratio = $width / $this->getwidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
}
function scale($scale) {
if($this->gd){
$width = $this->getwidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
}
function resize($width,$height) {
if($this->gd){
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getwidth(), $this->getheight());
$this->image = $new_image;
}
}
}
?>
|