28.03.2024

SOCSEO.RU

Интересная информация и полезные статьи…

Эффектная загрузка картинки на сервер PHP

Загрузка картинки php

Загрузка картинки 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");