Что такое код imagedestroy

Содержание

Предупреждение: imagedestroy() ожидает, что параметр 1 будет ресурсом

0 Joan [2020-01-12 06:32:00]

Я пытаюсь создать код для генерации CAPTCHA, и вот первая часть моего кода:

Я провел небольшое исследование, но не могу понять, в чем проблема. Вот предупреждения, которые возникли, когда я попытался ввести CAPTCHA:

Примечание: неопределенный индекс: ввод в C:\xampp\htdocs\CAPTCHA2\latest.php в строке 33

Предупреждение: imagedestroy() ожидает, что параметр 1 будет ресурсом, строка указана в C:\xampp\htdocs\CAPTCHA2\latest.php в строке 63

Ниже приведена функция создания изображения CAPTCHA

Я только недавно начал изучать php, любая помощь очень ценится. Благодарю.

Является ли ImageDestroy () требуется при обработке только одно изображение?

Я использую PHP для обработки какой-то образ, используя расширение GD. Структура кода довольно сложно, изображения выделяются «глубоко» в коде, и есть много, если это просто, что катапультирование. Скрипт обрабатывает только одно изображение, и как только он записывает его в файл он выходит.

Я предполагаю, что я мог бы использовать попробовать . поймать вместо этого, но мне интересно знать, является ли это действительно необходимо вызвать ImageDestroy () или сборщик мусора РНР освободит его, когда заканчивается сценарий?

Нет, вам не нужно вызывать эту функцию, но это хорошая практика, потому что изображения могут быть большими, и если вы находитесь в переполненной среде важны каждый килобайт.

ИмиджCтрой, Москва

Компания «ИмиджCтрой» зарегистрирована в городе Москве по адресу улица Туристская, 27, корп.1 и относится к категории Стройматериалы.

Режим работы: понедельник-пятница 09:00-18:00. Вы можете связаться с представителями компании по телефону: +7 (967) 223-34-44, +7 (495) 956-21-91.

Пожалуйста, при обращении в компанию сообщайте, что информацию о ней Вы нашли на сайте MoreFirm.ru. Спасибо!

ИмиджCтрой

г. Москва , улица Туристская, 27, корп.1

+7 (967) 223-34-44
+7 (495) 956-21-91

Оставляя свой отзыв, вы принимаете наши правила:

    Все поля обязательны для заполнения.

Указывайте настоящий адрес e-mail и телефон — это необходимо для решения спорных вопросов с представителями организации.

Мы будем писать вам, только если возникнет спорная ситуация по вашему отзыву.

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

Если у вас есть претензии к организации — обязательно оставьте комментарий для представителя (например, номер договора и подробности ситуации) и приложите фотографии, которые бы доказывали вашу правоту.

Если вы хотите приложить больше, чем 3 файла — запакуйте их в архив (максимальный размер каждого файла — 10 мб)

При обращении представителя компании и в отсутствие доказательств вашего отзыва он может быть удален.

Оцените компанию по пятибальной шкале: от 1 до 5.

Если оценка высокая — поставьте отметку «Мне нравится».

Мы оставляем за собой право передавать ваши данные представителям организации по их запросу — для решения конфликтных ситуаций.

Окончательное решение о размещении или удалении отзыва принимается администрацией.

Благодарим вас за отзыв! После проверки модератором он будет добавлен на сайт.

Мы свяжемся с вами, если у представителей организации возникнут вопросы по вышему отзыву.

Мне нужно использовать imagedestroy() в этом цикле?

Я использую одну и ту же переменную для создания большого количества изображений, поэтому каждый из них переопределяет предыдущий. Нужно ли использовать imagedestroy() ?

Создан 22 авг. 11 2011-08-22 21:08:59 hugo_leonardo

1 ответ

В зависимости от того, что вы делаете именно вы должны поставить imagedestroy() в петлю, чтобы освободить память и освободить место для следующих изображений. С другой стороны, это просто не повредит

Создан 22 авг. 11 2011-08-22 21:10:16 KingCrunch

но, сомневаюсь, когда я переопределяю переменную, я уничтожу это изображение? или я должен уничтожить его вручную? – hugo_leonardo 22 авг. 11 2011-08-22 21:16:18

Сомнительно уничтожить его вручную. Когда вы отключите переменную PHP, освободите связанные ресурсы, как только будет запущен сборщик мусора, но я бы не стал предполагать, что это освободит память, выделенную GD-библиотекой/расширением, сразу же (пока я не знать внутренние детали этого расширения). Иначе вы можете столкнуться с утечкой памяти, потому что без ссылки (переменной) вы больше не сможете уничтожить изображение. – KingCrunch 22 авг. 11 2011-08-22 21:35:03

Добавление водяного знака на все картинки сайта

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

Мы решили написать универсальный скрипт, который можно запустить из консоли или прямо в браузере и обновить все картинки на сайте.

И так задача:

  1. Картинки находятся в папку img в корне сайта;
  2. Добавить на картинки водяной знак по центру;
  3. Перенести все картинки в папку img2;

В процессе решения задачи, оказалось, что все картинки ещё и разного размера от 200 до 7000 пикселей по ширине, а водный знак в виде логотипа должен быть на всех.Как мы решали эту задачу:

Этап 1. Обойти все файлы

Сначала нужно узнать с чем мы будем работать, а для этого мы вывели на экран все файлы и папки, которые находятся в папку img на сайте.

И функция обхода всех элементов папки:

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

Илон Маск рекомендует:  Что такое код hw_stat

Единственное что тут не реализована, проверка на картинки, но она нам не пригодилась.

Этап 2. Воссоздать структуру папок

Так как у нас множество папок, с вложенными папками, и так до 10 уровня, для успешной работы всех функций копирования и перемещения файлов, нужна готовая структура.

Для этого мы определяем имя конечно папки и если её нет, то создаем:

Данный код, вставляется после: echo $check; и при выполнении он генерирует новую структуру папок, на вашем сервере, при этом, запускать его можно бесконечно много раз, он не повредит структуру, а создает соседнею папку img2.

Этап 3. Добавить логотип на картинки

Для этого будем использовать четыре стандартные функции: imagecreatefrompng, imagecreatefromjpeg, imagecopy, imagejpeg и парочку дополнительных типа: imagedestroy, imagesx.

Все это библиотека GD для PHP, подключена у всех по умолчанию и так:

Таким образом, после 3-5 минут работы скрипта, в зависимости от количества файлов, у нас получается копия всех изображений в папке img2, но логотип находится в правом нижнем углу, и на всех картинках имеет разный размер. Можно поиграться с цифрами в imagecopy но эффекта от этого не будет. Картинки разные, значит и водный знак должен быть разным, поэтому мы переходим к 4 этапу.

4 этап. Адаптация и выравнивание логотипа

Для этого нам понадобиться преобразовать, исходный логотип stamp.png до размеров картинки, на которой будем его размещать, и вклеить точно по её середине.
Приступим:

Если на этапе 3, в imagecopy в качестве размеров вставляемой картинки использовали imagesx($stamp), то здесь уже используем размеры нового логотипа imagesx($sim).

Логотип содержит отступы 10 пикселей слева и справа, и задается соответственно цифрами 20 и 10 в коде.

Этап 5. Добавляем функцию преобразования в наш цикл:

Так как скрипт собирался на коленке, естественно его можно ещё упростить и улучшить, ваши предложения в комментариях. Но вот уже рабочий вариант:

Его достаточно положить в корневую папку сайта, задать исходную и конечную папку с картинками и запустить, если картинок очень много. Добавить вначале:

И запускать из консоли, чтобы видеть этапы работы.

Эксперименты со вставкой логотипа, и подбором степени его прозрачности лучше проводить в конечной папке, для этого в строке $root = $path.”/допишите/свой/путь/до/папки” или положите скрипт в конечную папку и запускайте оттуда.

Мы использовали стандартный логотип компании с прозрачностью 60%.

Заключение

Когда папка с новыми файлами будет готова, Вам остается только переименовать её с img2 в img. В итоге у вас на сайте будет папка с исходными файлами, которые можно за архивировать или удалить и папка с помеченными логотипом фотографиями.

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

Следующей задача, это заменить exif данные на всех картинках этого же сайта. Для чего это и как реализовали, расскажем в следующей статье.

Работа c графической библиотекой PHP GD library. Часть первая.

Если вы заядлый PHP разработчик, вы, наверняка, не только наслышаны о графической библиотеке GD library. Для тех, кто с ней не знаком, поясняю GD library позволяет создавать изображения, видоизменять и управлять ими без особых усилий. Сегодня, мы познакомимся с азами использования в PHP графической библиотеки GD library.

Прежде всего

Убедитесь, что GD библиотека установлена и активирована на вашем сервере. Не знаете как это сделать? Не переживайте, все просто! Вам только нужно создать PHP файл на сервере, затем введите следующее:

Теперь откройте страницу браузера и вы увидите громадный список возможностей вашей версии PHP. Прокрутите страницу немного вниз, найдите секцию ‘GD’ и убедитесь, что библиотека подключена. Если нет, свяжитесь с компанией, предоставляющей вам услуги хостинга. К счастью, на большинстве серверов, на которых я уже успел поработать и работаю, GD библиотека установлена и подключена.

Основные моменты

Давайте пройдемся по некоторым основным моментам. Во-первых, сделаем так, чтобы все отчеты об ошибках выдавались браузером. Этого можно добиться, введя в самом начале вашего php-кода следующее:

Нарисуем квадрат

Давайте начнем с самого простого и нарисуем с помощью PHP синий квадрат — ничего сверхъестественного, конечно, но надо же разобраться с основами. Чтобы получить желаемый квадрат, необходимо выполнить следующие действия:

• Установить тип содержимого как «изображение», чтобы браузер смог интерпретировать изображение должным образом;
• Создать новое пустое изображение, установив нужную ширину и высоту;
• Сделать цвет фона синим;
• Сохранить окончательный вариант изображения и передать его в браузер;
• Очистить память, которая использовалась для создания и хранения изображения;
• Организовать отображение рисунка из файла index.php

Теперь, когда мы определились с порядком действий, можно начинать кодирование. Я постарался прокомментировать каждую строчку кода, а о функциях, использовавшихся в процессе кодировки, расскажу потом. Итак, вот код для создания нашего синего квадрата. После написания мы сохраним его под именем ‘basic_square.php’.

Теперь давайте рассмотрим все использованные функции и каждый шаг вышеприведенного кода, чтобы лучше понять, что именно мы в нем делаем:

• Как я уже пояснял, мы добавляем опцию сообщения об ошибках, чтобы в случае необходимости быстро их исправить
• Затем мы используем функцию header(), чтобы установить тип содержимого – png
• Сохраняем изображение и устанавливаем необходимую ширину и высоту – более подробно см. imagecreate()
• Затем используем функцию imagecolorallocate, чтобы выбрать синий цвет для фона нашего рисунка. Обратите внимание, что в окончательном варианте будет виден цвет, установленный в первую очередь, так что наш квадрат получится синим, а не красным.
• Для окончательного сохранения рисунка мы используем imagepng(). Если вы желаете сохранить рисунок в каком-либо каталоге, следует ввести дополнительные параметры.
• И, наконец, мы чистим память с помощью функции imagedestroy()

Мы можем посмотреть на нарисованный нами квадрат, открыв файл blue_square.php, а, еще лучше будет, если мы установить ссылку на него на главной странице:

Если все было сделано правильно, вы увидите вот такой синий квадрат:

Илон Маск рекомендует:  Метод группового учета аргументов мгуа

Привет, Мир

Теперь, когда мы научились создавать изображения, давайте попробуем сделать изображение с текстом, написанным выбранным нами шрифтом. Мы можем воспользоваться любым шрифтом из каталога TrueType Font (.tff). В следующих примерах я буду использовать шрифт ‘Advent’. Давайте напишем «Hello World» на темно-сером квадрате. Внимание, смотрим на код, а затем подробно разбираем каждый шаг.

Сохраним код в файле ‘hello_world.php’и будем открывать его таким же способом, какой был указан выше. Итак, что здесь нового?

• Мы установили размер изображения 300*300 пикселей и использовали темно-серый фон
• Обратите внимание, как мы указывали путь к шрифту, используя имя шрифта: дело в том, что далее в коде нам придется накладывать текст на изображение. Кроме того, не забывайте, что имя шрифта пишется без расширения. Впрочем, это зависит от того, какую версию GD-библиотеки использует PHP: если названием шрифта не начинается с ‘/’, то потребуется расширение ttf – то есть, если перед названием файла нашего шрифта не стоит /, то в конце будет автоматически добавлено ttf.
• Затем мы пишем «Hello World!» и сохраняем текст для дальнейшего использования
• Важнейшая функция, использованная в этом коде – это imagettftext(), требующая указания 8 параметров: путь к изображению, размер изображения, угол наклона, ось x, ось y, цвет, шрифт, текст (в таком порядке)

Сохраните код, откройте его любым способом, и вы увидите вот такую картинку:

Поверните его!

Вы заметили, что у функкции imagettftext, соединяющей текст и картинку, есть параметр расположить под углом’? Значит, мы можем повернуть наш текст под любым углом. Давайте перепишем код и повернем строчку на квадрате.

Обратите внимание, мы установили значение -45 градусов вместо 0 градусов (как в предыдущем примере) – это все, что требуется для того, чтобы повернуть текст. Посмотрите на картинку.

Ну как? Интересно? Нет? Тогда давайте попробуем заняться чем-нибудь более практичным.

Какое сегодня число?

Мы можем не только сами рисовать картинки, но и использовать готовые! Немного кодировки, и у нас получится календарик, отображающий текущую дату (месяц, день и год). Ищем в Google заготовку для календаря, находим изображение в формате .svg – я изменил его размер и перевел в формат png. Посмотрите на заготовку:

Теперь у нас есть основа, и мы можем обработать ее с помощью функций GD и PHP. Предупреждаю, что я не претендую на звание величайшего в мире дизайнера – возможно, на сайте лучше смотрелась бы другая заготовка и другой шрифт. Так что дизайн за вами, а пока давайте посмотрим на код:

Итак, что мы здесь делаем? Что за функция list()? Давайте разберемся:

• Как всегда, мы устанавливаем тип содержимого, чтобы картинка отображалась правильно.
• В 10-й строчке вы видите функцию list function. Мы определяем формат даты с помощью функции explode() и сохраняем его. Таким образом можно упорядочивать любую информацию. Теперь нам открыт доступ к сведениям о текущем месяце, дне и годе.
• В строчках 22-24 мы пользуемся функцией imagettfbbox(), чтобы организовать формат даты. Функция обеспечивает отображение даты в заданном порядке, а для доступа к правому нижнему углу мы пишем $pos_month. Все это нужно для того, чтобы текст автоматически располагался правильно, не зависимо от его размера.
• Затем мы создаем каждую строчку по очереди и устанавливаем размер текста по оси Х.

Если не произошло никаких катастроф, у вас должна получиться представленная ниже картинка, с той лишь разницей, что дата будет той, что установлена на вашем компьютере – мой рисунок, как вы можете догадаться, статичен. За помощь со скриптом спасибо сайту catpin.

Кошки и фильтры изображений

Последнее, чему я сегодня вас научу, это фильтры изображений – очень интересная штука, поверьте мне. Функция imagefilter() берет готовое изображение и определенным образом изменяет его – например, переводит в черно-белый режим. Давайте посмотрим на картинку, с которой мы будем работать, в ее первоначальном виде.

А теперь сделаем кота черно-белым с помощью функции фильтрации изображений.

Вышеприведенный скрипт является достаточно гибким, так что вы без труда сможете сделать любой рисунок черно-белым – вот так:

Ставим в «источник» любую картинку, и вскоре она станет черно-белой. Тем, кто планирует использовать эту функцию на общедоступных серверах, потребуются дополнительные меры безопасности. Хотя в вышеприведенном скрипте указано изображение типа .jpeg, вы можете применять функцию для обработки любых графических файлов. Теперь наш кот выглядит так:

Другие фильтры:

В завершение урока я познакомлю вас с некоторыми другими графическими фильтрами и результатами их применения

Фильтр яркости

За яркость изображения отвечает третий параметр:

Гауссово размывание

Размывание по Гауссу, никаких дополнительных параметров

Контрастность

Третий параметр определяет контрастность

Удаление среднего значения (эффект рисунка)

Никаких дополнительных параметров.

Цветовой баланс

Устанавливает насыщенность красного, зеленого, синего цветов, а также альфа-канала (по желанию) в перечисленном порядке

До новых встреч.

Надеюсь, что вы более или менее разобрались с использованием в PHP библиотеки GD. Во второй части мы рассмотрим некоторые продвинутые техники и, конечно, узнаем еще больше интересного. Используйте библиотеку GD и свои творческие способности и обязательно расскажите мне, что у вас получилось!

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.blog.themeforest.net
Перевел: Максим Шкурупий
Урок создан: 19 Октября 2009
Просмотров: 69497
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Илон Маск рекомендует:  Как отобразить теги на веб-странице

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Почему GD не освобождает память, на ImageDestroy ()?

November 2020

350 раз

Мне нужен PHP CLI сценарий для выполнения различных преобразований изображений с помощью функций GD. Изображения довольно большие, поэтому мне нужно выжать столько памяти, сколько это возможно. Тем не менее, ImageDestroy (), кажется, не освободить память, когда его спросили.

Рассмотрим следующий сценарий демо «test.php»:

Давайте запустим его с помощью:

Как вы можете видеть, создавая одно изображение стоит 109-110MB. После создания вторых мы имеем вдвое больше, израсходовано. Но уничтожив первый не освобождает память. Вся память ресурсы, освобождается только после того, как оба изображения будут уничтожены.

Зачем? Разве я что-то упускается из виду? Что я должен сделать, чтобы изменить его?

UPDATE: Я добавил, установив $ res1 обнулить, а затем сначала убрать его совсем. Код:

Теперь результат является:

Кроме того, я добавил

перед ImageDestroy ($ res2); а потом дела идут странно:

По команде «свободной», память освобождается только после того, как скрипт закончился.

imagedestroy

imagedestroy — Destroy an image

Описание

imagedestroy() frees any memory associated with image image.

Список параметров

Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor() .

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Using imagedestroy() example

// create a 100 x 100 image
$im = imagecreatetruecolor ( 100 , 100 );

// alter or save the image

// frees image from memory
imagedestroy ( $im );
?>

Imagedestroy

Php функции


Php скрипты


imagedestroy

(PHP 3, PHP 4, PHP 5)

imagedestroy — Destroy an image

Description

bool imagedestroy ( resource image )

imagedestroy() frees any memory associated with image image . image is the image identifier returned by one of the image create functions, such as imagecreatetruecolor().

User Contributed Notes

roland at more-pc dot nl
25-Sep-2005 05:31

As Andrew states below, it’s IMPERATIVE that you use the imagedestroy () all.php?act=funct&argument= But your script may abort before it reaches the call to imagedestroy () ( for example the user may click the browsers ‘stop’ button). In this case the default PHP behaviour is to abort the script, never reaching your call to imagedestroy ().
One way of doing it (the one which works very well for me) is with register_shutdown_function():

function shutdown_func () <
global $img ;
if ( $img )
imagedestroy ( $img );
>
register_shutdown_function ( «shutdown_func» );
$img = imagecreate . (. );
. // manipulate image
// normally I’d need the following line, but now it’s handled by shutdown_func()
// imagedestroy ( $img );
?>

Andrew Hoffmann — ahoffmann at wisc dot edu
23-Jun-2005 06:25

When working with a lot of high-resolution images, it’s IMPERATIVE that you use the imagedestroy () all.php?act=funct&argument=

In my scenario, I was taking two high resolution desktop wallpapers and shrinking them down into successively smaller ones (preventing the user from having to upload a dozen files).

At first, my script would run, then just stop. I realized later that I had not destroyed the source image and the newly resized image in memory after I had finished writing the file out to disk. Thus, I quickly reached the memory limit that my hosting provider placed in their php.ini file.

Reusing an image variable does NOT clear the old data out of memory! You must use imagedestroy () to clear the data out. (I don’t know if unset() works as well).

Also note that the image data in memory is raw, so don’t base how much memory you are using based on the original filesize of the compressed image (such as jpeg or png).
dan at mlodecki dot net
05-Mar-2004 03:42

I have noticed that gd drawing functions can behave oddly if there is a previous image which has not been imagedestroy ()’ed. You should always imagedestroy when you are done with an image object.

Изучаем, что такое Image Hosting

Если Вам часто приходиться заниматься поиском и загрузкой изображений в интернете, то Вы, скорее всего, уже не раз слышали о системе image hosting. Image hosting – это быстрое и эффективное размещение графических объектов в интернет-ресурсах (на блогах, форумах или досках объявлений).

Трудно представить, что кто-то будет читать блог, если он перенасыщен информацией, и если в нём нет визуального подтверждения изложенной информации. Качественные изображения делают любой интернет-ресурс более посещаемым, интересным для пользователей. Без image hosting не можно обойтись и на многих форумах. Например, если Вы обсуждаете на форуме картины художников, или архитектурные памятки, Вам необходимо будет размещать фотографии с обсуждаемыми полотнами, или репродукции известных картин. Благодаря hosting можно загрузить необходимое количество изображений бесплатно. Сервисы, предлагающие хостинг изображений, обычно не требуют от своих пользователей регистрации, что позволяет ускорить и упростить процесс загрузки и размещения фотографий и других графических объектов.

Многие сервисы устанавливают ограничения по размеру для загружаемых изображений. Это необходимо для того, чтобы размещение осуществлялась быстро и загрузка картинок для просмотра не мешала быстрому просмотру и чтению тем на форуме или объявлений на доске объявлений. Если загружаемый объект имеет слишком большой размер, то некоторые сервисы требуют создание превью-изображений. Это помогает ускорить работу сервиса.

Сервисы, предлагающие image hosting, имеют простую и удобную схему загрузки изображений и могут предлагать несколько видов загрузки. Каждый из таких сервисов имеет правила пользования, придерживаться которых является обязательным для любого пользователя, который загружает рисунки. Такие правила выполняют роль фильтра. При помощи image hosting запрещается размещать изображения, призывающие к насилию, или противоречащие основным законам государства.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL