Эффектная загрузка картинки на сервер PHP
Первый код загружает картинку по функции — Генерация пути для картинок с целью оптимизации пространства!
Размер изображения не превышает 512 Кб, пиксели по ширине не более 500, по высоте не более 1500.
<form name="upload" action="download_img.php" method="POST" ENCTYPE="multipart/form-data">
Выберите файл для загрузки:
<input type="file" name="userfile">
<input type="submit" name="upload" value="Загрузить">
</form>
<?php
$uploaddir = 'images/';
// это папка, в которую будет загружаться картинка
$apend=date('YmdHis').rand(100,1000).'.jpg';
// это имя, которое будет присвоенно изображению
$uploadfile = "$uploaddir$apend";
//в переменную $uploadfile будет входить папка и имя изображения
// В данной строке самое важное - проверяем загружается ли изображение (а может вредоносный код?)
// И проходит ли изображение по весу. В нашем случае до 512 Кб
if(($_FILES['userfile']['type'] == 'image/gif' || $_FILES['userfile']['type'] == 'image/jpeg' || $_FILES['userfile']['type'] == 'image/png') && ($_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size']<=512000))
{
// Указываем максимальный вес загружаемого файла. Сейчас до 512 Кб
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
//Здесь идет процесс загрузки изображения
$size = getimagesize($uploadfile);
// с помощью этой функции мы можем получить размер пикселей изображения
if ($size[0] < 501 && $size[1]<1501)
{
// если размер изображения не более 500 пикселей по ширине и не более 1500 по высоте
echo "Файл загружен. Путь к файлу: <b>http:/yoursite.ru/".$uploadfile."</b>";
} else {
echo "Загружаемое изображение превышает допустимые нормы (ширина не более - 500; высота не более 1500)";
unlink($uploadfile);
// удаление файла
}
} else {
echo "Файл не загружен, вернитеcь и попробуйте еще раз";
}
} else {
echo "Размер файла не должен превышать 512Кб";
}
?>
Второй код с проверкой и изменением размера. Можно удалить еще метатеги предварительно.
<?php
class SimpleImage {
var $image;
var $image_type;
function load($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image);
}
}
function getWidth() {
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
// Теперь после того как мы поместили данный файл класса SimpleImage к себе на сервер посмотрим как его можно использовать.
// Следующий участок кода загрузит изображение image.jpg, изменить его ширину до 400 пикселей и высоту до 200 пикселей, а затем сохранит как image1.jpg.
// include('classSimpleImage.php');
// $image = new SimpleImage();
// $image->load('image.jpg');
// $image->resize(400, 200);
// $image->save('image1.jpg');
// Если необходимо изменить размеры изображения, основываясь только на ширине и при этом сохранить его пропорции, то сценарий сам выберет необходимую высоту. Для этого необходимо использовать метод resizeToWidth.
// include('classSimpleImage.php');
// $image = new SimpleImage();
// $image->load('image.jpg');
// $image->resizeToWidth(250);
// $image->save('image1.jpg');
// Возможно вы пожелаете изменить размер в процентном соотношении от его оригинала. Для этого существует метод scale, в качестве параметра которому передаются проценты.
// include('classSimpleImage.php');
// $image = new SimpleImage();
// $image->load('image.jpg');
// $image->scale(50);
// $image->save('image1.jpg');
// У данного класса есть еще один очень полезный метод output, который позволяет выводить изображения прямо в браузер, без предварительного сохранения. Данный метод может быть очень полезен при создании миниатюр.
// header('Content-Type: image/jpeg');
// include('classSimpleImage.php');
// $image = new SimpleImage();
// $image->load('image.jpg');
// $image->resizeToWidth(150);
// $image->output();
// Автор данного класса Simon Jarvis, на своем сайте предлагает следующий пример для изменения размера изображения загруженного через форму.
// if (isset($_POST['submit']) ) {
// include('classSimpleImage.php');
// $image = new SimpleImage();
// $image->load($_FILES['uploaded_image']['tmp_name']);
// $image->resizeToWidth(150);
// $image->output();
// }
// else {
// $form = '<form action="upload.php" method="post" enctype="multipart/form-data">
// <input type="file" name="uploaded_image" />
// <input type="submit" name="submit" value="Upload" />
// </form>';
// echo $form;
// }
Третий код делает деинтерлейс png — изменяет чересстрочную развертку для загрузки на медленном инете …
$img = imagecreatefrompng("interlaced.png");
imagealphablending($img, false);
imagesavealpha($img, true);
imageinterlace($img, 0);
imagepng($img, "deinterlaced.png");