восстановить образ base64_encode в файловую систему из базы данных - PullRequest
0 голосов
/ 16 марта 2012

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

Как я могу это сделать?

Редактировать ...!

Хорошо, я недостаточно объяснил.

Я использую этот код для кодирования своего изображения и сохранения его в таблице BLOB-объектов:

function base64_encode_image ($imagefile) {
$imgtype = array('jpg', 'gif', 'png');
$filename = file_exists($imagefile) ? htmlentities($imagefile) : die('Image file name does not exist');
$filetype = pathinfo($filename, PATHINFO_EXTENSION);
if (in_array($filetype, $imgtype)){
    $imgbinary = fread(fopen($filename, "r"), filesize($filename));
} else {
    die ('Invalid image type, jpg, gif, and png is only allowed');
}
return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
}

и использую этот код для отображения своего изображения в браузере:

if (!isset($_GET['id']) && !ctype_digit($_GET['id'])){
    die('Error');
} else {
    require_once( addslashes(dirname(dirname(__FILE__)) . '/config.php') );
    require_once( addslashes(dirname(__FILE__) . '/Functions.php'));
    $row = mysql_fetch_array(mysql_query ("SELECT `id`,`cover_small` FROM `om_manga` WHERE `Active` = '1' AND `id` = '".sql_quote($_GET['id'])."'"));
    if (isset($row['id'])){
        header("Content-type: image/jpeg");
        readfile($row['cover_small']);
    } else {
        die('Error');
    }
}

Теперь я хочу вернуть их в файл jpg.

Размер всех этих изображений не превышает 3 КБ.

Ответы [ 2 ]

3 голосов
/ 16 марта 2012

Используйте функцию PHP base64_decode () для преобразования закодированных данных обратно в двоичные.

Поскольку base64_decode возвращает строку, вы можете использовать file_put_contents () для записидекодированное содержимое в файл.

Меня удивляет, почему вы храните изображение в кодировке base64, если не используете его в этом формате.Вы также можете легко сохранить изображение в двоичном формате в столбце двоичного двоичного объекта.

Кодировка Base64 добавляет 33% служебных символов (не байтов).

Редактировать для исправленного вопроса

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

2 голосов
/ 16 марта 2012

Расшифруйте его так же, как вы его закодировали ...
base64_decode ()

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

// Retrieved values from database
$encodedImg = $sqlResult['encoded_img'];
$ext = $sqlResult['encoded_img_ext'];

// Concatenate new file name with existing extention
// NOTE : This parameter is a full path.  Make sure that the folder 
// you are writing the file to has the correct permissions allowing the
// script write access.
$newImagePath = "/some/path/on/the/servers/filesystem/";
$newImageName = $newImagePath."decoded_image.".$ext;

// Saving the decoded file with the new file name.
file_put_contents($newImageName, base64_decode($encodedImg));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...