2

我正在尝试显示来自 mysql 数据库的图像。一些图像显示正确,但有些图像在底部显示为剪切/裁剪,裁剪部分仅显示为空白,当它成为图像的一部分时,您真的无法摆脱它。

CSS 无法解决这个问题,并且使用 imagecreate 等在旅途中重新创建图像不会恢复它。我将元标记设置为 utf-8。根据我的阅读,这可能与 utf-8 bom 左右有关。我基本上使用 file_get_contents 或 fopen 和 fread 来获取图像并将它们存储在数据库中并使用 header() 或 base64_encode 输出它们。但是我这样做,我得到相同的结果。

这是浏览器的基本输出图像代码:

//html form
<form action='' method='post' enctype='multipart/form-data'>
<input type='file' name='image' size='10'>
<input type='submit' name='submit_image' value='Upload' />
</form> 

//table creation
$my_photos = "CREATE TABLE IF NOT EXISTS photos (
id bigint NOT NULL auto_increment,
pic blob NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB";

if (mysql_query($my_photos)){
print "Success in photo TABLE creation!";
} else {
print "no photos TABLE created. Debug code!";
}

//get image
$uploaded_image = $_FILES['image'];
$image_tmp = $uploaded_image['tmp_name'];    
$image = file_get_contents($image_tmp); 

//connect and submit image to database
mysql_connect("server","username","password");
mysql_select_db("database");
mysql_query("INSERT IGNORE INTO photos (id, pic) values ('', '".$image."') "); 

//get image from database and output it
$image_query = mysql_query("SELECT * FROM photos WHERE id=1 ");
$image = mysql_fetch_array($image_query);   
header("Content-type: image/jpg/jpeg/gif/png/bmp/JPG");    
echo $image['pic'];

有没有人遇到过类似的问题,他们是如何解决的?

(我确实在我的应用程序中使用文件系统来处理某些图像,但在这种情况下需要 blob)。

非常感谢任何帮助。

4

1 回答 1

0

在 PHP 中处理来自 Web 客户端的 UTF-8 数据很困难,您需要做很多事情。

首先你需要确定你的html页面是否

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

在您的网页中

改变你的

<form action='' method='post' enctype='multipart/form-data'>

add accept-charset=UTF-8 is not be correcly shown here 请参阅此帖子的编辑以查看 html 代码。

如果这是 php 生成的也添加

header('Content-Type: text/html; charset=utf-8');

在上面

与数据库连接后直接运行

mysql_set_charset('utf8')

告诉 php mysql 客户端使用 UTF-8 而不是 latin1 进行连接。

我认为您需要将照片保存为 base64_encoded 字符串以保持数据正确。

一些额外的注释要修复

1) 不要使用 mysql_annymore 而是使用 mysqli_ 2) Html 代码将 html 属性中的 (') 更改为 (")

于 2013-08-12T22:49:57.953 回答