Сохранить изображение в БД - PullRequest
1 голос
/ 17 декабря 2009

Я использую скрипт (http://www.webmotionuk.co.uk/php-jquery-image-upload-and-crop-v11/), который обрабатывает изображение, а затем создает эскиз.

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

Я мог бы сначала сохранить созданный эскиз на фс, сохранить файл в БД и после того, как смогу удалить большой палец из ФС.

Есть ли способ сохранить изображение непосредственно в БД?

Это функция:

function resizeThumbnailImage($thumb_image_name, $image, $width, $height, $start_width, $start_height, $scale){

    list($imagewidth, $imageheight, $imageType) = getimagesize($image);

    $imageType = image_type_to_mime_type($imageType);



    $newImageWidth = ceil($width * $scale);

    $newImageHeight = ceil($height * $scale);

    $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);

    switch($imageType) {

        case "image/gif":

            $source=imagecreatefromgif($image); 

            break;

        case "image/pjpeg":

        case "image/jpeg":

        case "image/jpg":

            $source=imagecreatefromjpeg($image); 

            break;

        case "image/png":

        case "image/x-png":

            $source=imagecreatefrompng($image); 

            break;

    }



    imagecopyresampled($newImage,$source,0,0,$start_width,$start_height,$newImageWidth,$newImageHeight,$width,$height);

    switch($imageType) {

        case "image/gif":

            imagegif($newImage,$thumb_image_name); 

            break;

        case "image/pjpeg":

        case "image/jpeg":

        case "image/jpg":

            imagejpeg($newImage,$thumb_image_name,90); 

            break;

        case "image/png":

        case "image/x-png":

            imagepng($newImage,$thumb_image_name);  

            break;

    }

    chmod($thumb_image_name, 0777);

    return $thumb_image_name;

}

Ответы [ 3 ]

2 голосов
/ 17 декабря 2009

Вы можете сохранить двоичные данные, такие как изображение, в поле BLOB в базе данных. Это так же просто, как поместить содержимое файла в оператор INSERT. Тем не менее, я настоятельно рекомендую вам взглянуть на некоторые из этих тем. Хранение изображения в базе данных обычно не лучший способ:

Изображения пользователя: база данных или хранилище файловой системы?
Хранение изображений в базе данных: да или нет?
Должен ли я хранить свои изображения в базе данных или папках?
Будете ли вы хранить двоичные данные в базе данных или папках?
Хранить изображения в виде файлов или базы данных для веб-приложения?
Хранение небольшого количества изображений: blob или fs?
хранить изображение в файловой системе или базе данных?

2 голосов
/ 17 декабря 2009

Как:

Используйте file_get_contents() для возвращенного эскиза, а затем запишите результаты в поле большого двоичного объекта базы данных.

$image = file_get_contents($thumbnail);
mysql_query("INSERT INTO tblName (fieldName) VALUES ('{$image}')");

Но вы, возможно, не захотите, потому что:

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

0 голосов
/ 28 декабря 2009

Как сказал Дж. Сэмпсон, это не очень хороший способ хранения изображений, но это возможно. Сделайте, как сказал Джонатан, и затем извлеките данные из базы данных, что-то похожее на это:

<?php

$query = mysql_query("SELECT * FROM tbl WHERE id = 'blaa';");
$data = mysql_fetch_array($query);

//Then create image with function
imagecreatefromstring($data['imgdata'])

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