Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // Стандартный файл с входными данными - in.txt
- // Выходной файл изображения имеет о же имя что и оригинальное изображение, с приставкой out_
- // Т.е. test.jpg -> out_test.jpg
- class ImgMod {
- private $filePath;
- private $imgFilePath;
- private $imgEffect;
- private $imgPtr;
- private $imgType; // Может быть 'png' или 'jpg'
- // Конструктор класса
- // По-умолчанию имя входного файла(текстового) - in.txt
- function __construct($filePath = 'in.txt') {
- $this->filePath = $filePath;
- // Считывание входных данных из файла и загрузка изображения
- try {
- $this->loadDataFromFile();
- $this->loadImg();
- } catch (Exception $e) {
- echo 'При считывании данных возникла ошибка: '.$e->GetMessage();
- exit;
- }
- // Применение эффекта
- try {
- $this->applyEffect();
- } catch (Exception $e) {
- echo 'Во время применения эффекта возникла ошибка: '.$e->GetMessage();
- exit;
- }
- // Сохранение измененного изображения
- try {
- $this->saveImg();
- } catch (Exception $e) {
- echo 'При сохранении возникла ошибка: '.$e->GetMessage();
- exit;
- }
- imagedestroy($this->imgPtr);
- }
- // Считывание данных из файла
- private function loadDataFromFile() {
- // Определение наличия файла
- if ( !file_exists($this->filePath) )
- throw new Exception('Не найден файл '.$this->filePath);
- // Считывание данных
- $fileDataArr = file($this->filePath);
- $this->imgFilePath = trim($fileDataArr[0]);
- $this->imgEffect = trim($fileDataArr[1]);
- }
- // Загрузка изображения
- private function loadImg() {
- // Определение наличия файла изображения
- if ( !file_exists($this->imgFilePath) )
- throw new Exception('Не найден файл '.$this->imgFilePath);
- // Загрузка изображения
- $this->getImgType();
- switch($this->imgType) {
- case 'png':
- $this->imgPtr = imagecreatefrompng($this->imgFilePath);
- break;
- case 'jpg':
- $this->imgPtr = imagecreatefromjpeg($this->imgFilePath);
- break;
- default:
- throw new Exception('Неизвестный тип избражения - '.$this->imgType);
- break;
- }
- }
- // Определение типа изображения по расширению
- private function getImgType() {
- $fileNameArr = explode('.',$this->imgFilePath);
- if (count($fileNameArr) < 2)
- throw new Exception('Не задано расширение файла '.$this->imgFilePath);
- $fileType = trim(strtolower($fileNameArr[count($fileNameArr)-1]));
- if ( ($fileType != 'png') && ($fileType != 'jpg') && ($fileType != 'jpeg') )
- throw new Exception('Неизвестный тип файла - '.$fileType);
- if ( $fileType == 'jpeg' )
- $fileType = 'jpg';
- $this->imgType = $fileType;
- }
- // Применение эффекта к изображению
- private function applyEffect() {
- switch($this->imgEffect) {
- // Размытие
- case 'blur':
- imagefilter($this->imgPtr, IMG_FILTER_SMOOTH,0);
- imagefilter($this->imgPtr, IMG_FILTER_GAUSSIAN_BLUR);
- break;
- // Негатив
- case 'negative':
- imagefilter($this->imgPtr, IMG_FILTER_NEGATE);
- break;
- // Градации серого
- case 'gray':
- imagefilter($this->imgPtr, IMG_FILTER_GRAYSCALE);
- break;
- // Отражение по-горизонтали
- case 'mirror':
- $imgSizeX = imagesx($this->imgPtr);
- $imgSizeY = imagesy($this->imgPtr);
- $mirrImg = imagecreatetruecolor($imgSizeX,$imgSizeY);
- for($y = 0; $y < $imgSizeY; $y++) {
- for($x = 0; $x < $imgSizeX; $x++) {
- imagesetpixel($mirrImg,$x,$y,
- imagecolorat($this->imgPtr,($imgSizeX-$x-1),$y));
- }
- }
- imagedestroy($this->imgPtr);
- $this->imgPtr = $mirrImg;
- break;
- // Незивестный эффект
- default:
- throw new Exception('Неизвестный эффект - '.$this->imgEffect);
- break;
- }
- }
- // Сохранение изображения в файл
- private function saveImg() {
- $newImgFileName = dirname($this->imgFilePath).'/out_'.basename($this->imgFilePath);
- switch($this->imgType) {
- case 'jpg':
- imagejpeg($this->imgPtr,$newImgFileName);
- break;
- case 'png':
- imagepng($this->imgPtr,$newImgFileName);
- break;
- default:
- throw new Exception('Неизвестный тип файла - '.$this->imgType);
- break;
- }
- }
- }
- $oImgMod = new ImgMod();
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement