Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
0 / 0 / 2
Регистрация: 07.05.2020
Сообщений: 14

Как вывести изображение средствами Php

17.07.2021, 13:03. Показов 4783. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Задание сделать вывод изображения на странице, где ресайз картинки должен выполняться без использования css и html.
У меня есть такая страница
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
<?php
session_start();
require_once "mainphp.php";
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Галерея</title>
    <link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<h1>Галерея</h1>
<?php
//---------------------ПОЛУЧИТЬ Массив картинок из бд---------------------
$bd= new DataBse();
$pack=$bd->watch("picture","id_accout",$_SESSION['User_ID']);
while($row = $pack->fetch_assoc()){
//-------------------------------------------------------------------------    
look_picture($row['photo']);
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
    <button type="submit" name="addpic">Добавить</button>
</form>
</body>
Функцией look_picture(), которая выглядит вот так
PHP
1
2
3
4
5
6
7
function look_picture($photo) // вывод всех фотографий пользователя
{
    $im = imagecreatefrompng("img/".$photo);
    header('Content-Type: image/png');
    imagepng($im);
    imagedestroy($im);
}
я пытаюсь вывести картинку, но он ругается на header в этом месте и выводятся символы, а если поставить header перед session_start(); то выводится белый квадратик в середине экрана. перед <?php нет пробелов.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.07.2021, 13:03
Ответы с готовыми решениями:

Как вывести в .DOC файл таблицу средствами PHP B HTML
Как вывести в .DOC файл таблицу средствами PHP и HTML. В браузере я её просматриваю, а как сохранить её в формате .DOC я не знаю. И...

Не могу записать изображение в директорию /uploads/posts/2012-07/ средствами PHP
Доброго время суток форумчяни, столкнулся с задачкей интересной, на виртуальном (Денвере работает), а вот хочу записать изображение в...

Как обрезать изображение средствами javascript?
Здравствуйте! Столкнулся с проблемой, изображение находиться в div блоке при перетаскивании изображения, оно выходит за рамки div блока....

11
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
17.07.2021, 13:27
Цитата Сообщение от dhesaww Посмотреть сообщение
я пытаюсь вывести картинку, но он ругается на header в этом месте и выводятся символы
Оно не предназначено для вывода в тело страницы. На странице нужно выводить ссылки, а сами изображения - в ответ на отдельные HTTP-запросы.

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

Добавлено через 4 минуты
Ну, и хранить содержимое изображений в базе данных нет никакого смысла. Это используется, когда вы формируете изображение, например из текста, или видоизменяете изображение, например накладываете "водяные знаки".
0
0 / 0 / 2
Регистрация: 07.05.2020
Сообщений: 14
17.07.2021, 13:40  [ТС]
Получается мне нужно сделать тег <img src="<?php look_picture();?>">?

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

Добавлено через 7 минут
аа использовать <a href="mainphp.php">
где mainphp.php будет уже вот этот код?
PHP
1
2
3
4
 $im = imagecreatefrompng("img/".$photo);
    header('Content-Type: image/png');
    imagepng($im);
    imagedestroy($im);
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
17.07.2021, 13:59
Цитата Сообщение от dhesaww Посмотреть сообщение
Получается мне нужно сделать тег <img src="<?php look_picture();?>">?
Нет, выводите ссылку, т.е. адрес в ссылке.

Цитата Сообщение от dhesaww Посмотреть сообщение
Ну бд мне нужна, чтобы хранить информацию картинок пользователей. в самой таблице находится название картинки, которая хранится в папке, и id пользователя.
Это правильно. Я дописал для тех, кто вздумает и содержимое хранить в базе данных. А у вас ошибка в том, что вы используете код для изменения содержимого изображения, но при этом ничего не меняете. В таком случае достаточно просто считать содержимое файла, например при помощи readfile. Но это медленно.

Добавлено через 2 минуты
Вам достаточно просто выводить ссылки. Не вижу смысла выводить непосредственно изображения. Хотя сильно не присматривался.
0
0 / 0 / 2
Регистрация: 07.05.2020
Сообщений: 14
17.07.2021, 14:04  [ТС]
Я как понял, что этот способ мне не подойдет тут.
Мне нужно, чтобы выводились картинки пользователя на сайте в уменьшенном формате. Исходная картинка имеет, допустим, размер 512х512, а нужно чтобы отображало 100х100 не используя css и html. так бы я мог просто через css задать ей размеры , а тут надо как-то по-другому.

Добавлено через 1 минуту
а вот при нажатии на картинку, она открывается в исходном размере. тут, наверное, и надо использовать imagepng.
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
17.07.2021, 15:00
Цитата Сообщение от dhesaww Посмотреть сообщение
аа использовать <a href=
Нет. <img src= - это тоже ссылка. Имелось в виду, что у атрибута src значение должно быть адресом. Для формирования адреса можно использовать функцию, но совсем другую, причем лучше, если она будет возвращать, а не сама выводить:
HTML5
1
src="<?= imagelink($args) ?>"
Цитата Сообщение от dhesaww Посмотреть сообщение
где mainphp.php будет уже вот этот код?
В адресе же нужно идентифицировать изображение, к которому обращаетесь. И адреса должны быть естественными для файлов изображений, иначе потом сервер не сможет прочитать кэш без дополнительных инструкций

Добавлено через 5 минут
Цитата Сообщение от dhesaww Посмотреть сообщение
Мне нужно, чтобы выводились картинки пользователя на сайте в уменьшенном формате.
С этого и нужно было начинать. Все, что я написал, остается в силе кроме того, что достаточно просто выводить ссылки. На странице выводите ссылки на миниатюры, а в ответ на отдельные запросы - сами миниатюры. Даже если миниатюры будут небольшого размера, их все равно нужно выводить при помощи сервера или кэшировать при первом запросе!

Добавлено через 5 минут
Например, несмотря на размер 246х150 и несколько Кб, здесь изображения кэшируются при первом запросе: *******/domains (в каталоге /images/domains).
0
0 / 0 / 2
Регистрация: 07.05.2020
Сообщений: 14
17.07.2021, 16:50  [ТС]
Не знаю, правильно или нет, но это работает.
Вот что получилось. Спасибо
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
function look_picture() // вывод всех фотографий пользователя
    {
$image_p=imagecreatetruecolor(100,100);
        switch ($this->type){
            case "jpg":
                $image=imagecreatefromjpeg("img/".$this->name);
                break;
            case "gif":
                $image=imagecreatefromgif("img/".$this->name);
                break;
            case "png":
                $image=imagecreatefrompng("img/".$this->name);
                break;
        }
imagecopyresampled($image_p,$image, 0,0,0,0,100,100,$this->width,$this->height);
        switch ($this->type){
            case "jpg":
                imagejpeg($image_p,"img/f".$this->name."");
                break;
            case "gif":
                imagegif($image_p,"img/f".$this->name."");
                break;
            case "png":
                imagepng($image_p,"img/f".$this->name."");
                break;
        }
echo '<a href="img/'.$this->name.'"><img src="img/f'.$this->name.'"></a><button>Удалить</button><BR>';
    }
Добавлено через 9 минут
хотя я понимаю, что криво косо, ибо я создаю просто новый файл и вывожу его.
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
17.07.2021, 18:20
Цитата Сообщение от dhesaww Посмотреть сообщение
я создаю просто новый файл и вывожу его.
"Просто" пересоздаете (или пытаетесь пересоздавать) файл при каждом выводе ссылке. Не выводите его. "Криво косо" - это мягко сказано. Надеюсь, кто-нибудь другой извлечет большую пользу из написанного мной, чем вы.
0
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
17.07.2021, 18:22
Здесь надо открыть картинку библиотекой GD, затем привести изображение к нужному вам размеру. Изображение после обработки можно вывести, если не ошибаюсь, задав в атрибуте src тега img, не путь к изображению а путь к PHP сценарию который отдаст изображение после заголовков которые говорят браузеру что передается картинка. Этот екзотический способ лучше не применять, точно не скажешь что все браузеры смогут правильно отобразить изображение. В этом способе преимущество экономии места для файлов на сервере. Недостаток в частом отборе ресурсов сервера, тоесть использованию памяти и вычислений процессора.

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

Если места для записи файлов изображения мало, можно потринероватся и записывать изображение в БД.

К стати, для обработки изображений важно значение параметра memory_limit в файле php.ini
0
0 / 0 / 2
Регистрация: 07.05.2020
Сообщений: 14
17.07.2021, 18:48  [ТС]
Просто у меня без этого выводились либо символы и ругательство на header, либо белый квадрат в центре экрана.
Я делал функцию, которая должна была вернуть ссылку на фотографию, но не работало. Выглядела она вот так
HTML5
1
<img src="<?= look_picture($pack->name) ?>" >
Где $pack->name это ссылка на фотографию.

Добавлено через 11 минут
Цитата Сообщение от elnorbert Посмотреть сообщение
Здесь надо открыть картинку библиотекой GD, затем привести изображение к нужному вам размеру.
Ну, как я понимаю, надо создать его imagecreatefrompng, потом изменить размер imagecopyresampled. А вот как выводить?
return imagepng()?
0
1300 / 993 / 231
Регистрация: 01.10.2018
Сообщений: 3,866
17.07.2021, 19:38
Цитата Сообщение от dhesaww Посмотреть сообщение
А вот как выводить?
return imagepng()?
В третий и последний раз повторяю: выводить в ответ на отдельный запрос к самому изображению.
PHP
1
2
3
4
5
// вывод
imagepng($image, null, 9);
 
// сохранение кэша, лучше во временном каталоге с последующим rename($tmpfile, $file);
imagepng($image, $tmpfile, 9);
0
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
19.07.2021, 12:10
dhesaww, если ошибаюсь возможно кто-то из экспертов поправит. Короче говоря: в параметре src можно задавать путь к файлу изображения (может даже в виде пути к изображению по протоколу ftp), можно задавать и наверное любой адрес из любым названием и расширением файла (в том числе *.php файлы) важно что при этом ответит сервер. Должен ответить такими заголовками которые говорят браузеру что готовится передача изображения. Потому что в теге img ожидаются только изображения.

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

При этом на сервер картинка не должна записыватся, для этого надо вызвать функцию библиотеки GD которая запишет изображение на сервер. ВОЗМОЖНО ОШИБАЮСЬ, последний раз очень давно занимался программингом.

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

Добавлено через 38 минут
Еще более короче и проще говоря: создаете на сервере скрипт и в нем пишете код изменения размеров картинки, в этом скрипте применяете функции imagepng, imagegif и imagejpeg. А в параметре src вместо адреса изображения - адрес вашего скрипта. И все.

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

Code
1
?image_name=название_изображения
В вашем сообщении выше есть блок кода который это реализует, но его наверное надо не много подправить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.07.2021, 12:10
Помогаю со студенческими работами здесь

Вывести изображение, которое находится в переменной php
нужно вывести изображение &lt;IMG src=&quot;/img/&quot;&gt; а дальше нужно имя изображения которое находится в переменной PHP, как такое сделать?...

Сгенерированное изображение на php вывести на страницу без перезагрузки
Доброго времени суток, Проблема в том, что не могу созданное на php изображение вывести на страницу. Подробнее: Ситуация у меня...

Как записать изображение объекта Graphics в объект Image или Bimap средствами GDI+ ?
Появилась необходимость записать изображение объекта Graphics в объект Image или Bimap. Как я понял, суть библиотеки GDI+ в рисовании...

Средствами чистого JS без библиотек,php,AJAX нужно вывести все теги a href вместе с их содержимым c другого сайта
Вообщем есть сайт, допустим site.com на которым средствами чистого JS без библиотек,php,AJAX нужно вывести все теги a href вместе с их...

Как зделать поддомен средствами PHP
Возможно ли это? Если да то как? Заранее благодарен за ответ.


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru