Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
180 / 95 / 25
Регистрация: 04.02.2016
Сообщений: 308
Записей в блоге: 3

Класс обработки изображений

04.11.2016, 12:23. Показов 1297. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня, уважаемые специалисты!

Сперва опишу проблему, потом будет код.

Решил сэкономить времени и скачал готовый класс ClassSimpleImage авторства Simon Jarvis. Но все оказалось не очень радужно и пришлось его немного "подшаманить", дабы начал работать на php7 (класс был написан в 2006 г).

В итоге все работает, при работе с Jpeg. Если загружаю GIF или PNG - все тоже работает, но сохраненные файлы не читабельны, а в браузер выводит черт знает что.

Итак, файл класса img_creater.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
 
Class ImageCreator {
    public $image;
    public $image_type;
    
    //Загрузка
    function load($fname) {
        $image_info = getimagesize($fname);
        $this->image_type = $image_info[2];
        if($this->image_type == 2) {
            $this->image = imagecreatefromjpeg($fname);
        } elseif($this->image_type == 1) {
            $this->image = imagecreatefromgif($fname);
        } elseif($this->image_type == 3) {
            $this->image = imagecreatefrompng($fname);
        }
    }
    
    function getWidth() {
        return imagesx($this->image);
    }
    function getHeight() {
        return imagesy($this->image);
    }
    
    //изменить размер
    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;
    }
 
    //изменить размер только по высоте, оставив пропорции
    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 output() {
        if($this->image_type == 2 ) {
            header('Content-type: image/jpg');
            imagejpeg($this->image);
            imagedestroy($this->image);
        } elseif($this->image_type == 1 ) {
            header('Content-type: image/gif');
            imagegif($this->image);
            imagedestroy($this->image);
        } elseif($this->image_type == 3 ) {
            header('Content-type: image/png');
            imagepng($this->image);
            imagedestroy($this->image);
        }
    }
    
    //сохранение файла. Указывается ТОЛЬКО имя, без расширения
    function save($new_fname, $compression=75) {
        if($this->image_type == 2) {
            imagejpeg($this->image, $new_fname.".jpg", $compression);
        } elseif($this->image_type == 1) {
            imagegif($this->image, $new_fname.".gif");
        } elseif($this->image_type == 3) {
            imagepng($this->image, $new_fname.".png");
        }
    }
 
}   
 
?>
Далее простейший файл загрузки test.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
require_once('img_creator.php');
 
if(isset($_FILES['img']['name'])) {
    $fname = $_FILES['img']['tmp_name'];
    
    $img = new ImageCreator();
    $img->load($fname);
    $img->scale(50);
    $img->save('0001');
 
    }
 
?>
 
<form action="test.php" method="post" enctype="multipart/form-data">
    <input type="file" name="img" />
    <input type="submit" name="submit" value="Upload" />
</form>
Уважаемые форумчане, помогите, пожалуйста, научить все это дело общаться с GIF и PNG
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2016, 12:23
Ответы с готовыми решениями:

Как ускорить денвер для обработки изображений
Здравствуйте При помощи php делаю обработку узображений, на одну картинку уходит примерно 20 секунд, обрабатываю раз в неделю по 600...

Библиотека обработки изображений
Доброго времени суток! Я решил перенести своё приложение написаное на vb.net на андроид, но столкнулся с проблемой обработки изображений. Я...

Библиотека обработки изображений
Подскажите библиотеку, с помощью которой я смогу выполнять различные операции с изображениями формата JPEG.

6
180 / 95 / 25
Регистрация: 04.02.2016
Сообщений: 308
Записей в блоге: 3
07.11.2016, 16:42  [ТС]
Мда, что-то не густо с ответами...

У меня тут просто еще проблема возникла. В класс добавил функцию по обрезке изображения
PHP
1
2
3
4
function crop($x_o, $y_o, $width, $height) {
        $new_image = imagecreatetruecolor($width, $height);
        imagecopyresampled($new_image, $this->image, 0, 0, $x_o, $y_o, $width, $height, $this->getWidth(), $this->getHeight());
        $this->image = $new_image;
При вызове команды
PHP
1
2
3
4
5
6
7
8
9
10
...
if(isset($_FILES['img']['name'])) {
    $fname = $_FILES['img']['tmp_name'];
    
    $img = new ImageCreator();
    $img->load($fname);
    $img->crop($_POST['x_o'], $_POST['y_o'], $_POST['width'], $_POST['height']);
    $img->output();
    }
...
Выдает "Fatal error: Uncaught Error: Call to undefined method ImageCreator::crop() in C:\Server\data\htdocs\admin\img_test.php :9 Stack trace: #0 {main} thrown in ...." со ссылкой на строку, где я вызываю функцию crop.

В чем может быть проблема?
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
07.11.2016, 18:01
Цитата Сообщение от Hugonavy Посмотреть сообщение
Уважаемые форумчане, помогите, пожалуйста, научить все это дело общаться с GIF и PNG
Для начала проверь содержание переменной $this->image_type веред сохранением/выводом.

Добавлено через 3 минуты
Цитата Сообщение от Hugonavy Посмотреть сообщение
Выдает "Fatal error: Uncaught Error: Call to undefined method ImageCreator::crop() in C:\Server\data\htdocs\admin\img_test.php :9 Stack trace: #0 {main} thrown in ...." со ссылкой на строку, где я вызываю функцию crop.

В чем может быть проблема?
Нет созданного вами метода. Причины могут быть разные, например ты забыл загрузить новый класс на сервер или подключаешь другой класс. Ищи в этом направлении.
0
180 / 95 / 25
Регистрация: 04.02.2016
Сообщений: 308
Записей в блоге: 3
09.11.2016, 13:23  [ТС]
andr-xw, со вторым вопросом разобрался)) Забыл к тестовому файлу require_once добавить с классом

По поводу типа файла - при загрузке png (gif-ов у меня нет под рукой) выдает 3, что, собственно, является правильным ответом.
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
09.11.2016, 13:59
Да на первый взгляд правильно все. Хз. Попробуй другие библиотеки поискать.
0
180 / 95 / 25
Регистрация: 04.02.2016
Сообщений: 308
Записей в блоге: 3
09.11.2016, 14:14  [ТС]
В том-то и дело, что с jpg все отлично работает, косяк только с png и gif. Может с настройками php что-то не так? Есть вариант попросить Вас попробовать у себя? Может только на моем компе не пашет?
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
09.11.2016, 14:21
Цитата Сообщение от Hugonavy Посмотреть сообщение
Есть вариант попросить Вас попробовать у себя?
Вариант то конечно такой есть, но мне лень.

Но ты и сам сможешь это выяснить попробовав несколько разных библиотек.
Если ни одна не заработает - то проблема у тебя в настройках.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2016, 14:21
Помогаю со студенческими работами здесь

Автоматизация обработки изображений
Доброго времени суток! Помогите реализовать программу: Открываются изображения, которые обрезаются, и к этому обрезанному изображению...

Библиотека обработки изображений
Добрый день, подскажите пожалуйста библиотеку, при помощи которой можно получить массив пикселей изображения а потом записать похожий...

Алгоритмы обработки видео, изображений
Добрый день. Не совсем по теме возможное, но возник такой вопрос. Разработано к настоящему времени множества программ позволяющих...

Библиотека для обработки изображений
Здравствуйте программисты. Хочу спросить у вас, есть ли для .NET бесплатная библиотека для обработки изображений: изменения размера,...

Алгоритмы обработки изображений и видео
Привет всем! Я только только начинаю изучать программирование - рекомендовали начать немного с турбо паскаля, а потом перейти на С - как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru