За последние 24 часа нас посетили 16185 программистов и 1235 роботов. Сейчас ищут 1630 программистов ...

При выборке изображений из БД в браузере выводятся кракозябры.

Тема в разделе "PHP и базы данных", создана пользователем Pavl, 7 апр 2020.

  1. Pavl

    Pavl Новичок

    С нами с:
    3 ноя 2017
    Сообщения:
    44
    Симпатии:
    0
    Идея в том, чтобы вывести в браузер из БД картинки.
    Испольную локальный сервер на ПК.
    Пробую разные варианты, но пока ничего не получается.
    Вот 2 варианта из множества.

    Вариант кода №1:
    PHP:
    1. <?php
    2. mysql_connect('localhost','root','');
    3. $res = mysql_select_db('images');
    4. //var_dump($res);
    5. $res = mysql_query("SELECT * FROM img");
    6. //var_dump($res);
    7. while (false !== ($row = mysql_fetch_array($res))) {
    8.     echo "<a href='page.php'>$row[name]</a>";
    9.     echo '<br>';
    10.     echo "<img src=$row[samfile]";
    11.      }
    12.     ?>
    При использовании этого кода в браузере выводятся кракозябры.
    [​IMG]

    Вариант кода №2:
    PHP:
    1. <?php
    2. mysql_connect('localhost','root','');
    3. $res = mysql_select_db('images');
    4. //var_dump($res);
    5. $res = mysql_query("SELECT * FROM img ORDER BY id DESC");
    6. //var_dump($res);
    7. while (false !== ($row = mysql_fetch_assoc($res))) {
    8.     $show_img = base64_encode($row['samfile']);?>
    9.     <img src="data:image/jpeg;base64, <?php echo $show_img ?>" alt="" />
    10. <?php   } ?>
    При использовании этого кода в браузере выводятся изображения, но в урезанном виде.

    [​IMG]

    Если эти картинки выводить из папок, то они нормально отображаются.
    Проблема, только с их выводом из БД.
    БД выглядит так:
    [​IMG]

    Как сделать, чтобы изображения номально выводилмсь из БД? Желательно, в уменьшенном виде (хотя это уже немного другой вопрос).
     

    Вложения:

  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.859
    Симпатии:
    749
    Адрес:
    Татарстан
    Не лучшая идея хранить изображения в бд.
    А вас не смущают размеры изображений в бд, они и на диске столько занимают?

    Чтоб браузер понял, что ему отдают картинку - нужно соответствующий заголовок передать.

    С base64 уже ближе к истине Но если вы точно и правильно указываете тип изображения, то есть указываете jpeg а в бд точно jpeg? Ну ещё base64 занимает больше места, минимум на 30%

    Поэтому не извращайтесь а делайте как все - храните файлы на диске, а в бд только пути до них
     
    Pavl нравится это.
  3. Pavl

    Pavl Новичок

    С нами с:
    3 ноя 2017
    Сообщения:
    44
    Симпатии:
    0
    Добрый день!
    Я сейчас (как Вы, наверное. уже поняли) нахожусь. всего лишь, на стадии обучения, поэтому особо не задумываюсь над вопросом, где лучше хранить изображения, а просто стараюсь выполнить задание. Но, за замечание спасибо. Учту.
    Когда размещал изображения в БД, то, тоже, не особо задумывался над их размером. Просто с жёсткого диска туда загрузил. Когда в БД нажимаю на файл с изображением, то он скачивается на компьютер с расширением .BIN.
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Не то?
    Эти изображения я взял со своего компьютера (они там в формате jpeg). Только, если я случайно изменил их формат... Не знаю, как это теперь понять, какие они там? Указал в Бд их тип - BLOB. То есть, цели изменять формат изображений не было.
    Что, base32 правильнее указать?:)
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.584
    Симпатии:
    1.762
    У BLOB ограниченный размер, 2^16 + 2 байта. Могли не поместится и обрезаться.
    Не. Самый правильный вариант - изображения на диске, в базе - пути.
     
    Pavl нравится это.
  5. Pavl

    Pavl Новичок

    С нами с:
    3 ноя 2017
    Сообщения:
    44
    Симпатии:
    0
    Частично, удалось решить задачу.
    Изображения выводятся. И выводятся в уменьшенном виде.
    В БД изменил тип данных с BLOOB на LONGBLOOB. В результате чего объём изображений в БД значительно увеличился.
    А уменьшенный выводимый размер скорректировался просто установкой длины и ширины в коде.
    В общем - всё, как и нужно было.
    Но, образовалась следующая проблема, о которой я создам уже другую тему...
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.859
    Симпатии:
    749
    Адрес:
    Татарстан
    Установка ширины и высоты только зрительно уменьшает, реально всё также большая фотка тянется