基于Qt的jpg、png图片批处理成svg图工具
項目中有一個功能只能識別svg圖,但是我們的原始數(shù)據(jù)都是jpg或者png圖片,這就需要將jpg或者png轉(zhuǎn)成svg了。我們有好幾G的原始圖片需要轉(zhuǎn)成svg,經(jīng)過考慮,最終決定用Qt來開發(fā)這個小工具,簡單方便。廢話不多說,直接上核心代碼。
void picToSVGCOnvert(const QString &picPath, const QString &svgFile) {QFile file(picPath);file.open(QIODevice::ReadOnly);QByteArray byData = file.readAll();file.close();QImage image;//image.load(picPath);image.loadFromData(byData);QSvgGenerator generator;generator.setFileName(svgFile);generator.setSize(image.size());generator.setViewBox(QRect(0, 0, image.width(), image.height()));generator.setTitle("SVG");generator.setDescription("SVG File");QPainter painter;painter.begin(&generator);painter.drawImage(QPoint(0, 0), image);painter.end(); }上面的代碼就是實現(xiàn)轉(zhuǎn)換的核心代碼,實驗證明轉(zhuǎn)換效率高,質(zhì)量也很好。
下面是windows下運行的截圖
下面是linux下的效果,直接在文件服務(wù)器上操作,當然是實驗數(shù)據(jù)啦
上述實現(xiàn)了遞歸轉(zhuǎn)換,只需要指定一個路徑,就能實現(xiàn)對該路徑下的圖片進行轉(zhuǎn)換,包括該路徑下子目錄的圖片也能轉(zhuǎn)換。轉(zhuǎn)換的結(jié)果是同名的文件,當然,如果不需要原文件了,可以上述代碼的末尾加上?
file.remove();肯定會有人問,為什么不直接用image.load(file)直接打開文件,而是使用QFile去讀取。主要是我在linux下不懂為什么QImage直接load圖片文件會失敗。所以只能退而求其次,使用QFile去讀取文件。在windows環(huán)境下沒有這個問題,可以直接用image.load()方法。
好啦以上就是?Qt的jpg、png圖片批處理成svg圖工具的內(nèi)容,歡迎大家交流。
源碼及可執(zhí)行程序
總結(jié)
以上是生活随笔為你收集整理的基于Qt的jpg、png图片批处理成svg图工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react制作一个照片墙小demo
- 下一篇: VirtualBox虚拟机磁盘扩容