我用php创建了一个应用程序。如何保存用户的个人资料图片?使用 base64 编码将它们保存在数据库中是个好主意,就像这样
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAWgBaAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAAB..." />
或其他任何东西
这是一个
好主意/做法,通常只适用于将一起使用的非常小的 CSS 图像(如 CSS 精灵(,当 IE 兼容性无关紧要时,保存请求比可缓存性更重要。
它有许多显着的缺点:
在IE6和7中根本不起作用。
在 IE8 中,仅适用于大小不超过 32k 的资源。这是极限这适用于 base64 编码之后。换句话说,不超过32768 个字符。
它保存了一个请求,但反而使 HTML 页面膨胀!并使图像不可缓存。每次包含页面或样式表加载。
Base64 编码使图像大小膨胀 33%。
如果在 gzip 资源中提供,数据:图像几乎可以肯定将对服务器的资源造成可怕的压力!图片是传统上非常占用 CPU 资源,压缩成本很低减小尺寸。
将图像存储在服务器中,并将图像的路径存储在数据库中。这将减少数据库服务器上的额外过载。
最好将文件路径存储在数据库中,而不是将文件存储在数据库中。数据库适用于结构化数据,而不是 Blob。此外,数据库存储通常比文件系统存储更昂贵。服务器不需要任何特殊的编码或处理来访问文件系统中的图像
使用 javascript 将 base64 图像 "src" 复制到文本框中。使用 base64 网址文本框发布表单。最好将 url 保存在数据库中,而不是将文件保存在数据库中。您可以使用以下 PHP 代码保存 base64 映像:
<?php
define('UPLOAD_DIR', 'images/');
$base64img=$_POST['base64img'];
if (stristr($base64img, "data:image/jpeg;base64,")) {
$base64img = str_replace('data:image/jpeg;base64,', '', $base64img);
$uid=time();
$data = base64_decode($base64img);
$file = UPLOAD_DIR . $uid.'.jpg';
file_put_contents($file, $data);
}elseif (stristr($base64img, "data:image/png;base64,")) {
$base64img = str_replace('data:image/png;base64,', '', $base64img);
$uid=time();
$data = base64_decode($base64img);
$file = UPLOAD_DIR . $uid.'.png';
file_put_contents($file, $data);
}elseif (stristr($base64img, "data:image/jpg;base64,")) {
$base64img = str_replace('data:image/jpg;base64,', '', $base64img);
$uid=time();
$data = base64_decode($base64img);
$file = UPLOAD_DIR . $uid.'.jpg';
file_put_contents($file, $data);
}
?>