SELECT * FROM Vzakladke.net

Статьи об автоматизации и программировании

PHP класс для проверки и сохранения изображения в нужном формате

 

 

PHP класс для работы с изображениями - проверка и сохранение изображения в нужном формате

Это наиболее простой и удобный способ организовать сохранение изображения, реализованный с использованием механизма ООП. 


var $source – URL изображения, которое мы хотим получить (например: http://asksql.org/media/img/ico.png).
var $save_to – Путь куда будет сохранено изображение на нашем сервере (обязательно слэш на конце)

var $set_extension – Иногда расширение файла может быть установлено неверно. Мы можем установить значение “true” и тогда расширение будет автоматически назначено в соответствии с mime-type изображения.

var $quality – Это третий аргумент функции сохранения изображения. Он может быть использован для изображений JPEG (и принимать значения от 0 до 100) или PNG (от 0 до 9).

 
class GetImage {

var $source;
var $save_to;
var $set_extension;
var $quality;

    function download($method = 'curl') // метод по умолчанию cURL
    {
    $info = @GetImageSize($this->source);
    $mime = $info['mime'];

    // Какой тип изображения?
    $type = substr(strrchr($mime, '/'), 1);

    switch ($type)
    {
    case 'jpeg':
        $image_create_func = 'ImageCreateFromJPEG';
        $image_save_func = 'ImageJPEG';
        $new_image_ext = 'jpg';

        // Наилучшее качество: 100
        $quality = isSet($this->quality) ? $this->quality : 100;
        break;

    case 'png':
        $image_create_func = 'ImageCreateFromPNG';
        $image_save_func = 'ImagePNG';
        $new_image_ext = 'png';

        // Уровень компрессии: от  0  (без компрессии) до  9
        $quality = isSet($this->quality) ? $this->quality : 0;
        break;

    case 'bmp':
        $image_create_func = 'ImageCreateFromBMP';
        $image_save_func = 'ImageBMP';
        $new_image_ext = 'bmp';
        break;

    case 'gif':
        $image_create_func = 'ImageCreateFromGIF';
        $image_save_func = 'ImageGIF';
        $new_image_ext = 'gif';
        break;

    case 'vnd.wap.wbmp':
        $image_create_func = 'ImageCreateFromWBMP';
        $image_save_func = 'ImageWBMP';
        $new_image_ext = 'bmp';
        break;

    case 'xbm':
        $image_create_func = 'ImageCreateFromXBM';
        $image_save_func = 'ImageXBM';
        $new_image_ext = 'xbm';
        break;

    default:
        $image_create_func = 'ImageCreateFromJPEG';
        $image_save_func = 'ImageJPEG';
        $new_image_ext = 'jpg';
    }

    if(isSet($this->set_extension))
    {
    $ext = strrchr($this->source, ".");
    $strlen = strlen($ext);
    $new_name = basename (substr($this->source, 0, -$strlen)).'.'.$new_image_ext;
    }
    else
    {
    $new_name = basename ($this->source);
    }

    $save_to = $this->save_to.$new_name;

        if($method == 'curl')
        {
        $save_image = $this->LoadImageCURL($save_to);
        }
        elseif($method == 'gd')
        {
        $img = $image_create_func($this->source);

            if(isSet($quality))
            {
               $save_image = $image_save_func($img, $save_to, $quality);
            }
            else
            {
               $save_image = $image_save_func($img, $save_to);
            }
        }

        return $save_image;
    }

    function LoadImageCURL($save_to)
    {
    $ch = curl_init ($this->source);
    $fp = f open ($save_to, "wb");

    // устанавливаем URL и другие функции.
    $options = array(CURLOPT_FILE => $fp,
                     CURLOPT_HEADER => 0,
                     CURLOPT_FOLLOWLOCATION => 1,
                     CURLOPT_TIMEOUT => 60); // Таймаут в 1 минуту должен быть достаточен

    curl_setopt_array($ch, $options);

    curl_exec($ch);
    curl_close($ch);
    f close ($fp);
    }
}

 

Обращаемся к классу - указываем источник, сохраняем рисунок в указанную директорию:

 

$image = new GetImage;

$image->source = $url_img; // даем ссылку на картинку
$image->save_to = './uploads/imgart/'; // путь куда загружаем
$imget = $image->download('curl'); 
if($imget) {
echo 'Картинка сохранена.';  }

 

Как видим, функция download в классе принимает значение метода "curl" или "gd", расширение файла определяется по последним символам - до точки обрезаем строку, далее используется как пример метод из переменной $image_create_func, которая взывает например функцию ImageCreateFromJPEG если тип изображения JPG/JPEG, или ImageCreateFromPNG если тип изображения PNG.

 

Кстати, хоть и не к месту, вместо f o p e n() можно применять file_get_contents() или аналог этой функции на CURL мог бы упрощенно выглядеть например так (без CURLOPT_FOLLOWLOCATION, если эта опция не поддерживается из-за настроек безопасности):

 

function file_get_data($url) {
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Set curl to return the data 
                                                     ​// instead of printing it to the browser.
		curl_setopt($ch, CURLOPT_URL, $url);
		$data = curl_exec($ch);
		curl_close($ch);
		return $data;
}

 

Дата публикации: 2015-07-03 00:04:40

PHP

0

Отзывы:

Ваше имя:

Ваш e-mail (необязательно):

Сообщение:

Captcha