Created
April 8, 2011 15:28
-
-
Save zeuxisoo/910107 to your computer and use it in GitHub Desktop.
Simple upload and resize image on PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- attachment | |
- 1.jpg | |
- 2.jpg | |
... | |
... | |
... | |
- index.php | |
- resize_image.php | |
- uploader.php |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
if (isset($_POST['action']) && $_POST['action'] == "upload") { | |
include_once "uploader.php"; | |
include_once "resize_image.php"; | |
$uploader = new Uploader($_FILES['files']); | |
$uploader->set_upload_to("./attachment"); | |
$uploader->set_valid_extensions(array('jpg', 'png', 'bmp')); | |
$uploader->set_resize_image_library(new ResizeImage()); | |
if ($uploader->is_valid_extension() === false) { | |
echo "<p>Error</p>"; | |
print_r($uploader->get_errors()); | |
}else{ | |
if ($uploader->run() === false) { | |
echo "<p>Error</p>"; | |
print_r($uploader->get_errors()); | |
}else{ | |
echo "...Uploaded"; | |
if ($uploader->resize(70) === false) { | |
echo "<p>Error</p>"; | |
print_r($uploader->get_errors()); | |
}else{ | |
echo "...Resized"; | |
} | |
} | |
} | |
exit; | |
} | |
?> | |
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data"> | |
<input type="hidden" name="action" value="upload" /> | |
1: <input type="file" name="files[]" /><br /> | |
2: <input type="file" name="files[]" /><br /> | |
3: <input type="file" name="files[]" /> | |
<input type="submit" value="Upload" /> | |
</form> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
$image = new ResizeImage(); | |
$image->init('picture.jpg'); | |
$image->resize(250,400); | |
$image->save('picture2.jpg'); | |
$image->init('picture.jpg'); | |
$image->resize_to_width(250); | |
$image->save('picture2.jpg'); | |
$image->init('picture.jpg'); | |
$image->scale(50); | |
$image->save('picture2.jpg'); | |
$image->init('picture.jpg'); | |
$image->resize_to_height(500); | |
$image->save('picture2.jpg'); | |
$image->resize_to_height(200); | |
$image->save('picture3.jpg'); | |
$image->init('picture.jpg'); | |
$image->resize_to_width(150); | |
$image->output(); | |
*/ | |
class ResizeImage { | |
private $image; | |
private $image_type; | |
public function init($filename) { | |
$image_info = getimagesize($filename); | |
$this->image_type = $image_info[2]; | |
switch($this->image_type) { | |
case IMAGETYPE_JPEG: | |
$this->image = imagecreatefromjpeg($filename); | |
break; | |
case IMAGETYPE_GIF: | |
$this->image = imagecreatefromgif($filename); | |
break; | |
case IMAGETYPE_PNG: | |
$this->image = imagecreatefrompng($filename); | |
break; | |
} | |
} | |
public function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) { | |
switch($image_type) { | |
case IMAGETYPE_JPEG: | |
imagejpeg($this->image, $filename, $compression); | |
break; | |
case IMAGETYPE_GIF: | |
imagegif($this->image,$filename); | |
break; | |
case IMAGETYPE_PNG: | |
imagepng($this->image,$filename); | |
break; | |
default: | |
return false; | |
break; | |
} | |
if($permissions != null) { | |
chmod($filename, $permissions); | |
} | |
return true; | |
} | |
public function output($image_type = IMAGETYPE_JPEG) { | |
switch($image_type) { | |
case IMAGETYPE_JPEG: | |
imagejpeg($this->image); | |
break; | |
case IMAGETYPE_GIF: | |
imagegif($this->image); | |
break; | |
case IMAGETYPE_PNG: | |
imagepng($this->image); | |
break; | |
} | |
} | |
public function get_width() { | |
return imagesx($this->image); | |
} | |
public function get_height() { | |
return imagesy($this->image); | |
} | |
public function resize_to_height($height) { | |
$ratio = $height / $this->get_height(); | |
$width = $this->get_width() * $ratio; | |
$this->resize($width, $height); | |
} | |
public function resize_to_width($width) { | |
$ratio = $width / $this->get_width(); | |
$height = $this->get_height() * $ratio; | |
$this->resize($width, $height); | |
} | |
public function scale($scale) { | |
$width = $this->get_width() * $scale/100; | |
$height = $this->get_height() * $scale/100; | |
$this->resize($width, $height); | |
} | |
public function resize($width,$height) { | |
$new_image = imagecreatetruecolor($width, $height); | |
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->get_width(), $this->get_height()); | |
$this->image = $new_image; | |
} | |
} | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class Uploader { | |
private $files = array(); | |
private $extensions = array(); | |
private $errors = array(); | |
private $store_directory = "./attachment"; | |
private $resize_image_library_instance = null; | |
public function __construct($files) { | |
if (is_array($files) === false) { | |
$files[] = $files; | |
} | |
$this->files = $files; | |
} | |
public function set_upload_to($store_directory) { | |
$this->store_directory = $store_directory; | |
} | |
public function set_valid_extensions($extensions, $case_sensitive = false) { | |
$this->extensions = $extensions; | |
$this->case_sensitive = $case_sensitive; | |
} | |
public function set_resize_image_library($resize_image_library_instance) { | |
$this->resize_image_library_instance = $resize_image_library_instance; | |
} | |
public function is_valid_extension() { | |
$total = count($this->files); | |
for($i=0; $i<$total; $i++) { | |
if (empty($this->files['name'][$i]) === false) { | |
$file_extension = $this->get_extension($this->files['name'][$i]); | |
if (in_array($file_extension, $this->extensions) === false) { | |
$this->errors['type'] = "extension"; | |
$this->errors['file_name'] = $this->files['name'][$i]; | |
$this->errors['file_extension'] = $file_extension; | |
return false; | |
} | |
} | |
} | |
return true; | |
} | |
public function run() { | |
$total = count($this->files); | |
for($i=0; $i<$total; $i++) { | |
if (empty($this->files['name'][$i]) === false) { | |
if (move_uploaded_file($this->files['tmp_name'][$i], $this->store_directory.'/'.$this->files['name'][$i]) == false) { | |
$this->errors['type'] = "run"; | |
$this->errors['file_name'] = $this->files['name'][$i]; | |
} | |
} | |
} | |
return empty($this->errors); | |
} | |
public function resize($scale_size = 50) { | |
$total = count($this->files); | |
for($i=0; $i<$total; $i++) { | |
$image = realpath($this->store_directory.'/'.$this->files['name'][$i]); | |
if (file_exists($image) === true && is_file($image) === true) { | |
$this->resize_image_library_instance->init($image); | |
$this->resize_image_library_instance->scale($scale_size); | |
if ($this->resize_image_library_instance->save($image) === false) { | |
$this->errors['type'] = "resize"; | |
$this->errors['file_name'] = $image; | |
} | |
} | |
} | |
return empty($this->errors); | |
} | |
public function get_errors() { | |
return $this->errors; | |
} | |
// | |
private function get_extension($filename) { | |
$info = pathinfo($filename); | |
return $info['extension']; | |
} | |
private function get_filename($file) { | |
$info = pathinfo($file); | |
return $info['filename']; | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment