• 51172阅读
  • 26回复

[讨论]QImage的SAVE方法保存为JPG图片问题 [复制链接]

上一主题 下一主题
离线njliu1113
 
只看楼主 倒序阅读 楼主  发表于: 2011-01-13
— 本帖被 XChinux 执行加亮操作(2011-01-13) —
QImage image("123.jpg");
QPainter painter;
painter.begin(&image);
painter.drawText(10,20,"南京");
painter.end();
image.save("456.png");
关键是最后这里,它只能保存为PNG格式的图片,PNG文件太大,影响我后面程序操作,我如何能保存为JPG的图片呢。


[ 此帖被njliu1113在2011-01-13 15:17重新编辑 ]
离线dbzhang800

只看该作者 1楼 发表于: 2011-01-13
引用楼主njliu1113于2011-01-13 15:16发表的 QImage的SAVE方法保存为JPG图片问题 :
QImage image("123.jpg");
QPainter painter;
painter.begin(&image);
painter.drawText(10,20,"南京");
painter.end();
.......


能先告诉大家一下,保存jpg你遇到了什么困难么?
离线梅克斯
只看该作者 2楼 发表于: 2011-01-13
save这个函数后面还有一个参数是指定保存的格式的.......额...........
离线roywillow

只看该作者 3楼 发表于: 2011-01-13
save如果不指定格式的话好像会根据扩展名来判断
结果代码里那扩展名明显是png啊……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线XChinux

只看该作者 4楼 发表于: 2011-01-13
save()的时候指定数据格式为.jpg就行了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线njliu1113
只看该作者 5楼 发表于: 2011-01-13
谢谢各位回答,我保存的时候如果扩展名写成.JPG    image.save("456.jpg");
F5调试发现一运行到这就提示   “SIGSEGV”这个错误。
用PNG或者是BMP都没问题,不过保存后图片太大了;
如果用.gif执行后一点反应也没有,也不报错也不生成文件。
离线njliu1113
只看该作者 6楼 发表于: 2011-01-13
回 4楼(XChinux) 的帖子
请问怎么指定啊,我是菜鸟级,谢谢
离线roywillow

只看该作者 7楼 发表于: 2011-01-13
翻阅一下文档看看吧……
bool save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
第一个参数是文件名
第二个是格式
第三个是质量
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线cycloneii

只看该作者 8楼 发表于: 2011-01-13
是不是没有安装jpg和gif图像插件?
离线梅克斯
只看该作者 9楼 发表于: 2011-01-14
image.save("456.png","JPG");

这一句我自己测试可以保存为jpg图片,我没有多装插件,楼主是怎样保存的?
离线梅克斯
只看该作者 10楼 发表于: 2011-01-14
image.save("456.jpg","JPG");
图片名称后缀是jpg,上面写错.....

离线njliu1113
只看该作者 11楼 发表于: 2011-01-14
回 7楼(roywillow) 的帖子
我看了bool save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
,不过关键后面参数值是多少,能举个实例吗?
如果我要保存为JPG格式的话
save ( "123.jpg",0, -1 ),中间参数给什么值才对呢?

save("qw3.jpg","JPG",-1)也不行啊


QImage image("images/20110114091415349_0.jpg");
    QPainter painter;
    painter.begin(&image);
    //painter.drawEllipse(10,20, 80,70); // draw an ellipse
    painter.drawText(10,20,"南京*******有限公司 从左拍车头");
    painter.drawText(10,40,"时间:2011-01-12 11:24:53.542");
    painter.drawText(10,60,"速度:87Km/h 限速:60Km/h 超速比:26%");
    painter.end();
    image.save("kkkk.jpg","JPG",-1);       // save picture*/

我是这样保存的,执行到最后一句的时候跳出“Signal name:SIGSEGV      Signal meaning:Segmentation fault”
[ 此帖被njliu1113在2011-01-14 10:45重新编辑 ]
离线njliu1113
只看该作者 12楼 发表于: 2011-01-14
回 8楼(cycloneii) 的帖子
我用OPEN ,然后READ,WRITE 生成JPG然后是可以保存下来的。这能说明我jpg和gif图像插件有了吗?如果没有,应该怎么安装呢
离线njliu1113
只看该作者 13楼 发表于: 2011-01-14
回 9楼(梅克斯) 的帖子
QImage image("images/20110114091415349_0.jpg");
    QPainter painter;
    painter.begin(&image);
    //painter.drawEllipse(10,20, 80,70); // draw an ellipse
    painter.drawText(10,20,"南京*******有限公司 从左拍车头");
    painter.drawText(10,40,"时间:2011-01-12 11:24:53.542");
    painter.drawText(10,60,"速度:87Km/h 限速:60Km/h 超速比:26%");
    painter.end();
    image.save("kkkk.jpg","JPG");       // save picture*/

我是这样保存的,执行到最后一句的时候跳出“Signal name:SIGSEGV      Signal meaning:Segmentation fault”
[ 此帖被njliu1113在2011-01-14 10:40重新编辑 ]
离线梅克斯
只看该作者 14楼 发表于: 2011-01-14
回 13楼(njliu1113) 的帖子
我刚试了下你发的代码,不过路径不一样,可以保存,字也有写上去
你把路径都改成完整路径试下
离线njliu1113
只看该作者 15楼 发表于: 2011-03-08
回 14楼(梅克斯) 的帖子
JPG.rar (371 K) 下载次数:12 我把我DEMO传上来,麻烦帮我看一下
现在保存为JPG图片是不成功的
离线梅克斯
只看该作者 16楼 发表于: 2011-03-09
额...你发的这个好像少了头文件,我编译没法通过.....
建议楼主自己写个简单的demo,就只有保存图片功能的,测试下看行不行
离线njliu1113
只看该作者 17楼 发表于: 2011-03-09
回 16楼(梅克斯) 的帖子
我把不要的都删除了,麻烦您看一下
里面IMAGES文件夹下面有个88.jpg,为0字节。每次一保存图片就生成这个文件,然后窗体关闭。

qserial.rar (349 K) 下载次数:15
离线梅克斯
只看该作者 18楼 发表于: 2011-03-10
回 17楼(njliu1113) 的帖子
你这个里面图片的路径有问题,你先试试绝对路径(我把你代码里的路径改成绝对路径是可以用的),
要用相对路径的话建议用qrc
离线njliu1113
只看该作者 19楼 发表于: 2011-03-10
回 18楼(梅克斯) 的帖子
绝对路径和相对路径都尝试过了  一样的效果。

image.save("images/88.jpg","JPG");
image.save("/home/lxl/qserial/images/88.jpg","JPG");

两个都不可以啊
离线njliu1113
只看该作者 20楼 发表于: 2011-03-10
回 18楼(梅克斯) 的帖子
要用相对路径的话建议用qrc

QRC是什么啊
离线梅克斯
只看该作者 21楼 发表于: 2011-03-11
回 20楼(njliu1113) 的帖子
我的意思是一开始载入图片和后来保存图片都要用完整路径,
你一开始的图片都没有获取到的话,后面保存的路径再正确也是空啊.....

  QImage image("/home/qt/qserial/images/20110308114247819_1.jpg");
    image.save("/home/qt/qserial/images/88.jpg","JPG");

你的代码我把这两句改成这样是可以的.....
离线梅克斯
只看该作者 22楼 发表于: 2011-03-11
还有建议楼主去看点入门的书籍吧.....也不至于连qrc都不知道的...
离线njliu1113
只看该作者 23楼 发表于: 2011-03-11
回 21楼(梅克斯) 的帖子
我是这样操作的 2个都是绝对路径,如果我再新建一个项目,它有时候能成功有时候又不能成功。
离线coblan

只看该作者 24楼 发表于: 2011-03-11
Re:获取QT窗口句柄
QTextCodec* cod=QTextCodec::codecForLocale();
       QImage* image=new QImage(300,200,QImage::Format_RGB32);//("images/20110114091415349_0.jpg");
           QPainter painter;

           painter.begin(image);
            painter.setBrush(Qt::white);
            painter.drawRect(image->rect());
           //painter.drawEllipse(10,20, 80,70); // draw an ellipse
           painter.drawText(10,20,cod->toUnicode("南京*******有限公司 从左拍车头"));
           painter.drawText(10,40,cod->toUnicode("时间:2011-01-12 11:24:53.542"));
           painter.drawText(10,60,cod->toUnicode("速度:87Km/h 限速:60Km/h 超速比:26%"));
           painter.end();
           image->save("kkkk.jpg","JPG");
图片,,我咋能显示出来呢,,
可能是你其他地方有问题。
[ 此帖被coblan在2011-03-11 12:08重新编辑 ]
离线csfeng13

只看该作者 25楼 发表于: 2011-03-17
我也遇到这个保存图片的 问题了,在板之上貌似不支持。正在想办法解决。。。。。
Qt 好东东,大家一起努力……
离线sydnash

只看该作者 26楼 发表于: 2011-06-09
    我也遇到同样的问题,应该是插件库的问题
    我编译出来的QT的plugins里面有libjpg.so这个库,但是不知道该怎么设置路径

快速回复
限100 字节
 
上一个 下一个