• 5489阅读
  • 6回复

[提问]图片字节数问题 [复制链接]

上一主题 下一主题
离线纵刀少年
 

只看楼主 倒序阅读 楼主  发表于: 2014-11-05
现有一图片格式为JPG,右键属性显示3133字节。
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                    "/home",
                                                    tr("Images (*.png *.xpm *.jpg)"));
  rimage=QImage(fileName,"JPG");
QByteArray ba;
QBuffer buffer(&ba);
  buffer.open(QIODevice::WriteOnly);
rimage.save(&buffer, "JPG");
qDebug()<<"size:"<<buffer.data().size();               //输出结果为1577
qDebug()<<"size:"<<buffer.data().toHex().size(); //输出结果为3154

那么究竟为什么是3154,而不是3133。
实际上,现在我是用QT写个软件来模拟一个终端设备的图片数据发送。现在我用这个软件模拟发送图片(图片来源自终端采集保存在SD卡上的文件),服务器能收到数据并解析显示图片出来。但用终端实际测试则图片不能显示。现在发现字节数是不一样的,为什么呢?
离线纵刀少年

只看该作者 1楼 发表于: 2014-11-05
对比了一下发送出来的HEX流,前面都是相同的“ffd8ffe000104a4649460001010”,但后面就开始不同了,结尾也不同
离线dbzhang800

只看该作者 2楼 发表于: 2014-11-05
首先,要比较,也是用你的 1577 和 3133 比较,而不是前者X2 再和后者比较。
其次,同一个jpg图片,被不同图片工具打开再保存,文件大小不一致是很正常的状况。
离线纵刀少年

只看该作者 3楼 发表于: 2014-11-05
回 dbzhang800 的帖子
dbzhang800:首先,要比较,也是用你的 1577 和 3133 比较,而不是前者X2 再和后者比较。
其次,同一个jpg图片,被不同图片工具打开再保存,文件大小不一致是很正常的状况。 (2014-11-05 10:55) 

是啊,我就觉得是因为打开过再保存的原因。现在主要是想知道终端咋发送上服务器的图片为何解析不出来显示。我对比过两者HEX的数据,中间有一些是相同的,但有一些却是不同的。图片若是数据流传送,数据应该可以直接解析出图片来吧?服务器是C#写的,也就将接收到的图片数据放到byte数组,然后用stream读出。
能不能帮忙分析一下,或者给出解决思路?
离线dbzhang800

只看该作者 4楼 发表于: 2014-11-05
你应该检查的是:

1. 你终端发送的数据是不是正确的。
2. 终端发送的数据 和 服务端收到的数据是否一致。
离线纵刀少年

只看该作者 5楼 发表于: 2014-11-05
回 dbzhang800 的帖子
dbzhang800:你应该检查的是:
1. 你终端发送的数据是不是正确的。
2. 终端发送的数据 和 服务端收到的数据是否一致。
 (2014-11-05 11:08) 

嗯,我试试第二点
离线纵刀少年

只看该作者 6楼 发表于: 2014-11-05
我用串口助手直接把要发送的数据复制过来,用QString保存。
QString sss="ffd8ffe000104a46494600010100000100010000ffdb004300。。。。。。"
ui->pic3Label->setPixmap(QPixmap::fromImage(QImage::fromData(QByteArray::fromHex(sss.toUtf8()))));
然后程序输出窗口提示:
Corrupt JPEG data: 2779 extraneous bytes before marker 0xd9
Invalid JPEG file structure: missing SOS marker
快速回复
限100 字节
 
上一个 下一个