From 001eaf65cff92fe2869e2d763f60e6a48810f03a Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Mon, 20 Nov 2023 10:30:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=AF=BC=E5=87=BA=E5=AF=B9?= =?UTF-8?q?=E8=AF=9D=E6=A1=86=E4=B8=8A=E9=9D=A2=E7=9A=84=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=E6=9D=A1=E6=98=BE=E7=A4=BA=E4=B8=8D=E6=AD=A3=E7=A1=AE=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scanner2/dialog_exportimagefile.cpp | 608 ++++++++++++------------ app/scanner2/dialog_exportimagefile.h | 7 +- test/webservice/demo.html | 17 +- 3 files changed, 324 insertions(+), 308 deletions(-) diff --git a/app/scanner2/dialog_exportimagefile.cpp b/app/scanner2/dialog_exportimagefile.cpp index 66ee46db..59961614 100644 --- a/app/scanner2/dialog_exportimagefile.cpp +++ b/app/scanner2/dialog_exportimagefile.cpp @@ -31,8 +31,22 @@ Dialog_ExportImageFile::Dialog_ExportImageFile(const QString &destPath, const QS ui->setupUi(this); setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); + int totalCount = 0; + for (int i = 0; i < m_srcFiles.size(); ++i) + { + HGImgFmtReader imgFmtReader = nullptr; + HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader); + if (NULL != imgFmtReader) + { + HGUInt count = 0; + HGImgFmt_GetImagePageCount(imgFmtReader, &count); + totalCount += count; + HGImgFmt_CloseImageReader(imgFmtReader); + } + } + ui->progressBar->setMinimum(0); - ui->progressBar->setMaximum(srcFiles.size()); + ui->progressBar->setMaximum(totalCount); ui->progressBar->setValue(0); connect(this, SIGNAL(updateProgress(int)), this, SLOT(on_updateProgress(int)), Qt::QueuedConnection); @@ -57,290 +71,29 @@ void HGAPI Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param) { (void)thread; Dialog_ExportImageFile *p = (Dialog_ExportImageFile *)param; - HGResult ret = HGBASE_ERR_FAIL; + HGResult ret = HGBASE_ERR_FAIL; if (p->m_isSaveAsMulti) { - QString fileName = p->m_destPath + p->m_destName + p->m_destExt; - if (p->m_isOcr) { -#if 0 - - HGChar tmpFileName[256]; - HGBase_GetTmpFileName("tif", tmpFileName, 256); - - HGImgFmtWriter writer = NULL; - HGImgFmt_OpenImageWriter(tmpFileName, 0, &writer); - - for (int i = 0; i < p->m_srcFiles.size(); ++i) - { - if (p->m_stopThread) - { - break; - } - - emit p->updateProgress(i); - - HGImgFmtReader imgFmtReader = nullptr; - ret = HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader); - if (HGBASE_ERR_OK == ret) - { - HGUInt count = 0; - HGImgFmt_GetImagePageCount(imgFmtReader, &count); - for (HGUInt j = 0; j < count; ++j) - { - if (p->m_stopThread) - { - break; - } - - HGImage img = nullptr; - ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); - if (HGBASE_ERR_OK == ret) - { - ret = HGImgFmt_SaveImageToWriter(writer, img, NULL); - HGBase_DestroyImage(img); - } - - if (ret != HGBASE_ERR_OK) - { - break; - } - } - - HGImgFmt_CloseImageReader(imgFmtReader); - } - - if (ret != HGBASE_ERR_OK) - break; - } - - HGImgFmt_CloseImageWriter(writer); - - bool result = createOcrPdf(tmpFileName, getStdString(fileName).c_str(), m_ocrLanguageType); - QFile::remove(tmpFileName); - if (!result) - { - ret = HGIMGPROC_ERR_OCR; - } -#else - HGOCRMgr ocrMgr = nullptr; - ret = HGImgProc_CreateOCRMgr(0, &ocrMgr); - if (HGBASE_ERR_OK == ret) - { - for (int i = 0; i < p->m_srcFiles.size(); ++i) - { - if (p->m_stopThread) - { - break; - } - - emit p->updateProgress(i); - - HGImgFmtReader imgFmtReader = nullptr; - ret = HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader); - if (HGBASE_ERR_OK == ret) - { - HGUInt count = 0; - HGImgFmt_GetImagePageCount(imgFmtReader, &count); - for (HGUInt j = 0; j < count; ++j) - { - if (p->m_stopThread) - { - break; - } - - HGImage img = nullptr; - ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); - if (HGBASE_ERR_OK == ret) - { - ret = HGImgProc_AddToImageOCRList(ocrMgr, img); - HGBase_DestroyImage(img); - } - - if (ret != HGBASE_ERR_OK) - { - break; - } - } - - HGImgFmt_CloseImageReader(imgFmtReader); - } - - if (ret != HGBASE_ERR_OK) - break; - } - - if (ret == HGBASE_ERR_OK) - { - ret = HGImgProc_ImageListOCRToFile(ocrMgr, 0, getStdString(fileName).c_str(), NULL, NULL); - } - - HGImgProc_DestroyOCRMgr(ocrMgr); - } -#endif + ret = p->processMultiFileOcr(); } else { if (p->m_destExt == ".gif") { - ret = p->processGif(fileName); + ret = p->processMultiFileGif(); } else { - HGImgFmtWriter imgFmtWriter = nullptr; - ret = HGImgFmt_OpenImageWriter(getStdString(fileName).c_str(), 0, &imgFmtWriter); - if (HGBASE_ERR_OK == ret) - { - for (int i = 0; i < p->m_srcFiles.size(); ++i) - { - if (p->m_stopThread) - { - break; - } - - emit p->updateProgress(i); - - HGImgFmtReader imgFmtReader = nullptr; - ret = HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader); - if (HGBASE_ERR_OK == ret) - { - HGUInt count = 0; - HGImgFmt_GetImagePageCount(imgFmtReader, &count); - for (HGUInt j = 0; j < count; ++j) - { - if (p->m_stopThread) - { - break; - } - - HGImage img = nullptr; - ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); - if (HGBASE_ERR_OK == ret) - { - HGImgFmtSaveInfo saveInfo; - saveInfo.jpegQuality = (HGUInt)p->m_jpegQuality; - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE; - saveInfo.tiffJpegQuality = (HGUInt)p->m_tiffQuality; - - HGImageInfo imgInfo; - HGBase_GetImageInfo(img, &imgInfo); - if (HGBASE_IMGTYPE_BINARY == imgInfo.type) - { - if (1 == p->m_tiffCompressionBW) - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; - else if (2 == p->m_tiffCompressionBW) - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4; - } - else - { - if (1 == p->m_tiffCompression) - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; - else if (2 == p->m_tiffCompression) - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG; - } - - ret = HGImgFmt_SaveImageToWriter(imgFmtWriter, img, &saveInfo); - - HGBase_DestroyImage(img); - } - - if (ret != HGBASE_ERR_OK) - { - break; - } - } - - HGImgFmt_CloseImageReader(imgFmtReader); - } - - if (ret != HGBASE_ERR_OK) - break; - } - - HGImgFmt_CloseImageWriter(imgFmtWriter); - } + ret = p->processMultiFile(); } } } else { - int index = 1; - - for (int i = 0; i < p->m_srcFiles.size(); ++i) - { - if (p->m_stopThread) - { - break; - } - - emit p->updateProgress(i); - - HGImgFmtReader imgFmtReader = nullptr; - ret = HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader); - if (HGBASE_ERR_OK == ret) - { - HGUInt count = 0; - HGImgFmt_GetImagePageCount(imgFmtReader, &count); - for (HGUInt j = 0; j < count; ++j) - { - if (p->m_stopThread) - { - break; - } - - HGImage img = nullptr; - ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); - if (HGBASE_ERR_OK == ret) - { - char fileName[512]; - if(p->m_srcFiles.size() > 1 || count > 1) - { - sprintf(fileName, "%s%03d", getStdString(p->m_destName).c_str(), index); - }else - sprintf(fileName, "%s", getStdString(p->m_destName).c_str()); - - ++index; - - QString saveFileName = p->m_destPath + QString(StdStringToUtf8(fileName).c_str()) + p->m_destExt; - - HGImgFmtSaveInfo saveInfo; - saveInfo.jpegQuality = (HGUInt)p->m_jpegQuality; - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE; - saveInfo.tiffJpegQuality = (HGUInt)p->m_tiffQuality; - - HGImageInfo imgInfo; - HGBase_GetImageInfo(img, &imgInfo); - if (HGBASE_IMGTYPE_BINARY == imgInfo.type) - { - if (1 == p->m_tiffCompressionBW) - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; - else if (2 == p->m_tiffCompressionBW) - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4; - } - else - { - if (1 == p->m_tiffCompression) - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; - else if (2 == p->m_tiffCompression) - saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG; - } - - ret = MainWindow::saveImage(img, &saveInfo, p->m_isOcr, getStdString(saveFileName).c_str()); - HGBase_DestroyImage(img); - } - - if (ret != HGBASE_ERR_OK) - break; - } - - HGImgFmt_CloseImageReader(imgFmtReader); - } - - if (ret != HGBASE_ERR_OK) - break; - } + ret = p->processSingleFile(); } emit p->finish((int)ret); @@ -366,7 +119,77 @@ void Dialog_ExportImageFile::on_pushButton_clicked() m_thread = nullptr; } -HGResult Dialog_ExportImageFile::processGif(const QString &fileName) +HGResult Dialog_ExportImageFile::processMultiFileOcr() +{ + int handleCount = 0; + QString fileName = m_destPath + m_destName + m_destExt; + + HGOCRMgr ocrMgr = nullptr; + HGResult ret = HGImgProc_CreateOCRMgr(HGIMGPROC_OCRALGO_HANVON, &ocrMgr); + if (HGBASE_ERR_OK != ret) + { + return ret; + } + + for (int i = 0; i < m_srcFiles.size(); ++i) + { + if (m_stopThread) + { + break; + } + + HGImgFmtReader imgFmtReader = nullptr; + ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader); + if (HGBASE_ERR_OK != ret) + { + break; + } + + HGUInt count = 0; + HGImgFmt_GetImagePageCount(imgFmtReader, &count); + for (HGUInt j = 0; j < count; ++j) + { + if (m_stopThread) + { + break; + } + + emit updateProgress(handleCount); + + HGImage img = nullptr; + ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); + if (HGBASE_ERR_OK != ret) + { + break; + } + + ret = HGImgProc_AddToImageOCRList(ocrMgr, img); + HGBase_DestroyImage(img); + ++handleCount; + + if (HGBASE_ERR_OK != ret) + { + break; + } + } + + HGImgFmt_CloseImageReader(imgFmtReader); + if (HGBASE_ERR_OK != ret) + { + break; + } + } + + if (HGBASE_ERR_OK == ret) + { + ret = HGImgProc_ImageListOCRToFile(ocrMgr, 0, getStdString(fileName).c_str(), NULL, NULL); + } + + HGImgProc_DestroyOCRMgr(ocrMgr); + return ret; +} + +HGResult Dialog_ExportImageFile::processMultiFileGif() { HGUInt maxWidth = 0; HGUInt maxHeight = 0; @@ -392,12 +215,16 @@ HGResult Dialog_ExportImageFile::processGif(const QString &fileName) } } - HGGifSaveInfo gifSaveInfo = {maxWidth, maxHeight}; + int handleCount = 0; + QString fileName = m_destPath + m_destName + m_destExt; + HGGifSaveInfo gifSaveInfo = {maxWidth, maxHeight}; HGGifWriter gifWriter = NULL; HGResult ret = HGImgFmt_OpenGifWriter(getStdString(fileName).c_str(), &gifSaveInfo, &gifWriter); - if (ret != HGBASE_ERR_OK) + if (HGBASE_ERR_OK != ret) + { return ret; + } for (int i = 0; i < m_srcFiles.size(); ++i) { @@ -406,47 +233,230 @@ HGResult Dialog_ExportImageFile::processGif(const QString &fileName) break; } - emit updateProgress(i); - HGImgFmtReader imgFmtReader = nullptr; ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader); - if (HGBASE_ERR_OK == ret) + if (HGBASE_ERR_OK != ret) { - HGUInt count = 0; - HGImgFmt_GetImagePageCount(imgFmtReader, &count); - for (HGUInt j = 0; j < count; ++j) - { - if (m_stopThread) - { - break; - } - - HGImage img = nullptr; - ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); - if (HGBASE_ERR_OK == ret) - { - ret = HGImgFmt_SaveImageToGifWriter(gifWriter, 200, HG_MAKECOLOR(255, 255, 255, 255), img); - - HGBase_DestroyImage(img); - } - - if (ret != HGBASE_ERR_OK) - { - break; - } - } - - HGImgFmt_CloseImageReader(imgFmtReader); + break; } - if (ret != HGBASE_ERR_OK) + HGUInt count = 0; + HGImgFmt_GetImagePageCount(imgFmtReader, &count); + for (HGUInt j = 0; j < count; ++j) + { + if (m_stopThread) + { + break; + } + + emit updateProgress(handleCount); + + HGImage img = nullptr; + ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); + if (HGBASE_ERR_OK != ret) + { + break; + } + + ret = HGImgFmt_SaveImageToGifWriter(gifWriter, 200, HG_MAKECOLOR(255, 255, 255, 255), img); + HGBase_DestroyImage(img); + ++handleCount; + + if (HGBASE_ERR_OK != ret) + { + break; + } + } + + HGImgFmt_CloseImageReader(imgFmtReader); + if (HGBASE_ERR_OK != ret) + { break; + } } HGImgFmt_CloseGifWriter(gifWriter); return ret; } +HGResult Dialog_ExportImageFile::processMultiFile() +{ + int handleCount = 0; + QString fileName = m_destPath + m_destName + m_destExt; + + HGImgFmtWriter imgFmtWriter = nullptr; + HGResult ret = HGImgFmt_OpenImageWriter(getStdString(fileName).c_str(), 0, &imgFmtWriter); + if (HGBASE_ERR_OK != ret) + { + return ret; + } + + for (int i = 0; i < m_srcFiles.size(); ++i) + { + if (m_stopThread) + { + break; + } + + HGImgFmtReader imgFmtReader = nullptr; + ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader); + if (HGBASE_ERR_OK != ret) + { + break; + } + + HGUInt count = 0; + HGImgFmt_GetImagePageCount(imgFmtReader, &count); + for (HGUInt j = 0; j < count; ++j) + { + if (m_stopThread) + { + break; + } + + emit updateProgress(handleCount); + + HGImage img = nullptr; + ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); + if (HGBASE_ERR_OK != ret) + { + break; + } + + HGImgFmtSaveInfo saveInfo; + saveInfo.jpegQuality = (HGUInt)m_jpegQuality; + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE; + saveInfo.tiffJpegQuality = (HGUInt)m_tiffQuality; + + HGImageInfo imgInfo; + HGBase_GetImageInfo(img, &imgInfo); + if (HGBASE_IMGTYPE_BINARY == imgInfo.type) + { + if (1 == m_tiffCompressionBW) + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; + else if (2 == m_tiffCompressionBW) + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4; + } + else + { + if (1 == m_tiffCompression) + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; + else if (2 == m_tiffCompression) + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG; + } + + ret = HGImgFmt_SaveImageToWriter(imgFmtWriter, img, &saveInfo); + HGBase_DestroyImage(img); + ++handleCount; + + if (HGBASE_ERR_OK != ret) + { + break; + } + } + + HGImgFmt_CloseImageReader(imgFmtReader); + if (HGBASE_ERR_OK != ret) + { + break; + } + } + + HGImgFmt_CloseImageWriter(imgFmtWriter); + return ret; +} + +HGResult Dialog_ExportImageFile::processSingleFile() +{ + int handleCount = 0; + HGResult ret = HGBASE_ERR_OK; + + for (int i = 0; i < m_srcFiles.size(); ++i) + { + if (m_stopThread) + { + break; + } + + HGImgFmtReader imgFmtReader = nullptr; + ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader); + if (HGBASE_ERR_OK != ret) + { + break; + } + + HGUInt count = 0; + HGImgFmt_GetImagePageCount(imgFmtReader, &count); + for (HGUInt j = 0; j < count; ++j) + { + if (m_stopThread) + { + break; + } + + emit updateProgress(handleCount); + + HGImage img = nullptr; + ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img); + if (HGBASE_ERR_OK != ret) + { + break; + } + + QString fileName; + if(m_srcFiles.size() > 1 || count > 1) + { + char str[256]; + sprintf(str, "%s%03d", getStdString(m_destName).c_str(), handleCount + 1); + fileName = m_destPath + QString(StdStringToUtf8(str).c_str()) + m_destExt; + } + else + { + fileName = m_destPath + m_destName + m_destExt; + } + + HGImgFmtSaveInfo saveInfo; + saveInfo.jpegQuality = (HGUInt)m_jpegQuality; + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE; + saveInfo.tiffJpegQuality = (HGUInt)m_tiffQuality; + + HGImageInfo imgInfo; + HGBase_GetImageInfo(img, &imgInfo); + if (HGBASE_IMGTYPE_BINARY == imgInfo.type) + { + if (1 == m_tiffCompressionBW) + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; + else if (2 == m_tiffCompressionBW) + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4; + } + else + { + if (1 == m_tiffCompression) + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; + else if (2 == m_tiffCompression) + saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG; + } + + ret = MainWindow::saveImage(img, &saveInfo, m_isOcr, getStdString(fileName).c_str()); + HGBase_DestroyImage(img); + ++handleCount; + + if (HGBASE_ERR_OK != ret) + { + break; + } + } + + HGImgFmt_CloseImageReader(imgFmtReader); + if (HGBASE_ERR_OK != ret) + { + break; + } + } + + return ret; +} + void Dialog_ExportImageFile::closeEvent(QCloseEvent *e) { (void)e; diff --git a/app/scanner2/dialog_exportimagefile.h b/app/scanner2/dialog_exportimagefile.h index 80fda972..855f48ec 100644 --- a/app/scanner2/dialog_exportimagefile.h +++ b/app/scanner2/dialog_exportimagefile.h @@ -31,7 +31,10 @@ private slots: void on_pushButton_clicked(); private: - HGResult processGif(const QString &fileName); + HGResult processMultiFileOcr(); + HGResult processMultiFileGif(); + HGResult processMultiFile(); + HGResult processSingleFile(); protected: virtual void closeEvent(QCloseEvent *e); @@ -50,7 +53,7 @@ private: bool m_isOcr; QStringList m_srcFiles; - bool m_stopThread; + volatile bool m_stopThread; HGThread m_thread; }; diff --git a/test/webservice/demo.html b/test/webservice/demo.html index 613c1b0b..0008644f 100644 --- a/test/webservice/demo.html +++ b/test/webservice/demo.html @@ -178,20 +178,23 @@ } else if ("scan_image" == message['func']) { + var info = document.getElementById('info'); + info.value = message['image_path']; + //var myCanvas = document.getElementById("myCanvas"); //myCanvas.src = message['image_base64']; - var req1 = {'func':'insert_local_image', 'iden':'111', 'image_path':''}; - req1.image_path = message['image_path']; - socket.send(JSON.stringify(req1)); + //var req1 = {'func':'insert_local_image', 'iden':'111', 'image_path':''}; + //req1.image_path = message['image_path']; + //socket.send(JSON.stringify(req1)); //var req2 = {'func':'upload_local_file', 'iden':'111', 'file_path':'', 'upload_mode':'http', 'http_host':'192.168.100.70', 'http_port':8001, 'http_path':'/upload.php'}; //req2.file_path = message['image_path']; //socket.send(JSON.stringify(req2)); - var req3 = {'func':'delete_local_file', 'file_path':''}; - req3.file_path = message['image_path']; - socket.send(JSON.stringify(req3)); + //var req3 = {'func':'delete_local_file', 'file_path':''}; + //req3.file_path = message['image_path']; + //socket.send(JSON.stringify(req3)); } else if ("stop_scan" == message['func']) { @@ -397,7 +400,7 @@ 'remote_file_path':'/savedir/123.jpg', 'upload_mode':'http', 'http_host':'192.168.1.70', - 'http_port':8001, + 'http_port':8080, 'http_path':'/upload.php' })); }