fix issues:#IAB9AV #IAB2K4 #IAC8VD #IA5D36

This commit is contained in:
sufang 2024-07-11 16:18:25 +08:00 committed by handsome_feng
parent 8e5483bb24
commit 8396afb7c0
22 changed files with 168 additions and 185 deletions

View File

@ -62,6 +62,7 @@ public:
static QStringList g_allFormat;
static QStringList g_otherFormatList;
static bool g_needSaveAs;
static const QStringList m_supportFormats; //支持的格式列表
static QString saveWay(const QString &savepath, bool replace);
static bool save(const Mat &mat, const QString &savepath, const QString &type);
static bool save(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat);
@ -84,7 +85,6 @@ private:
static KylinImageCodecSignals *m_signalObj;
static QStringList *m_list; //用来保存正在保存的动图队列
static const QStringList m_supportFormats; // opencv支持的格式列表
static const QString m_supportFrmatsClassify; //打开文件格式列表
static const QStringList m_opencvSupportFormats; // opencv支持的格式列表
static const QStringList m_freeimageSupportFormats; // libfreeimage支持的格式列表

12
debian/changelog vendored
View File

@ -1,3 +1,15 @@
kylin-photo-viewer (1.3.0.3-ok22.13) nile; urgency=medium
* BUG号#IAB9AV 【次要】【gg-维哈柯】【看图】切换维吾尔族语言后智能处理按钮悬浮和子界面显示英文
#IAB2K4【次要】【AI看图】wlcom环境取色器窗口没有紧挨取色器图标显示(显示在窗口中央)X环境取色器窗口四角显示为直角
#IAC8VD【更新升级】【AI看图】使用控制面板更新系统从2.0-beta升级到最新RC版本报升级失败日志显示为AI看图问题
#IA5D36【次要】【AI看图】AI看图在看图中显示的位置和设计稿不一致
* 需求号:无
* 其他改动说明AI抠图插件支持看图所有支持打开格式的图片
* 影响域:无
-- sufang <sufang@kylinos.cn> Thu, 11 Jul 2024 14:59:11 +0800
kylin-photo-viewer (1.3.0.3-ok22.12) nile; urgency=medium
* BUG号IA7TBQ【次要】【蒙文】【看图】切换蒙文界面部分信息未翻译

5
debian/control vendored
View File

@ -41,13 +41,13 @@ Architecture: any
Depends: apng2gif,
apngasm,
libkysdk-ocr,
photo-viewer-aiassistant-plugin,
${misc:Depends}, ${shlibs:Depends}
Description: Photo viewer, support to view, zoom and rotate images of various formats
Package: photo-viewer-aiassistant-plugin
Architecture: any
Depends: onnxruntime,
Depends: kylin-photo-viewer,
onnxruntime,
libfreeimage-dev,
libfreeimageplus-dev,
libopencv-dnn-dev,
@ -56,7 +56,6 @@ Depends: onnxruntime,
libopencv-photo-dev,
libopencv-stitching-dev,
libopencv-video-dev,
libopencv-video406,
libstb-dev,
libgif-dev,
librsvg2-dev,

View File

@ -1,4 +1,7 @@
model /usr/share/kylin-photo-viewer
usr/include/
usr/bin/
usr/lib/*.so*
usr/lib/*/qt5/
usr/lib/*/cmake/
usr/share/

View File

@ -1,3 +1 @@
model /usr/share/kylin-photo-viewer
usr/lib/*.so*
usr/include/
usr/lib/*/libphoto-viewer-aiassistant-plugin.so*

View File

@ -43,7 +43,7 @@ SOURCES += \
photoviewerplugin.cpp
unix {
target.path = /usr/lib
target.path = $$[QT_INSTALL_LIBS]/
}
!isEmpty(target.path): INSTALLS += target

View File

@ -11,12 +11,7 @@ bool PhotoViewerPlugin::isMattingImagePath(const QString &path)
//不是支持的文件格式忽略
QString format = path;
format = format.split(".").last();
const QString supportFormats = "PNG(*.png);;JPE(*.jpe);;JPEG(*.jpeg);;"
"JPG(*.jpg);;"
"ICO(*.ico);;"
"BMP(*.bmp);;"
"JNG(*.jng);;"
"XPM(*.xpm);;TIFF(*.tiff);;TIF(*.tif);;J2K(*.j2k);;JP2(*.jp2)";
const QStringList supportFormats = KylinImageCodec::m_supportFormats;
if (supportFormats.contains(format.toLower())) {
return true;
} else {
@ -34,7 +29,7 @@ void PhotoViewerPlugin::matToTransparent(Mat mat)
return;
}
// 检查图像是否为四通道,四通道转为三通道
if (mat.channels() == 4) {
if (mat.channels() != 3) {
cv::cvtColor(origImageMat, origImageMat, cv::COLOR_BGRA2BGR);
}
if (mat.channels() != 3) {

View File

@ -188,6 +188,7 @@
<file>res/sp1/reduce.svg</file>
<file>res/sp1/rotate.svg</file>
<file>res/sp1/sidebar.svg</file>
<file>res/sp1/mark.svg</file>
<file>res/mark/arrow.svg</file>
<file>res/mark/blur.svg</file>
<file>res/mark/bold.svg</file>

8
res/sp1/mark.svg Normal file
View File

@ -0,0 +1,8 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.8">
<path d="M12.0064 22C7.96069 22.0025 4.31207 19.5671 2.76268 15.8298C1.21329 12.0926 2.06844 7.78992 4.92918 4.92918C7.78992 2.06844 12.0926 1.21329 15.8298 2.76268C19.5671 4.31207 22.0025 7.96069 22 12.0064C21.9931 17.5229 17.5229 21.9931 12.0064 22V22Z" stroke="#262626" stroke-width="2"/>
<path d="M17 21V18.5C17 17.6716 16.3284 17 15.5 17H8.5C7.67157 17 7 17.6716 7 18.5V21" stroke="#262626" stroke-width="2"/>
<path d="M15 17V13.5C15 13.2239 14.7761 13 14.5 13H9.5C9.22386 13 9 13.2239 9 13.5V17" stroke="#262626" stroke-width="2"/>
<path d="M11.0136 6.91836C11.1993 5.80423 12.8007 5.80423 12.9864 6.91836L14 13H10L11.0136 6.91836Z" fill="#D9D9D9" stroke="#262626" stroke-width="1.8"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 818 B

View File

@ -91,7 +91,6 @@ SOURCES += main.cpp \
view/colordialog.cpp \
view/colorsliderstyle.cpp \
view/colorsquare.cpp \
view/customdialog.cpp \
view/gradientslider.cpp \
view/marking.cpp \
view/maskwidget.cpp \
@ -142,7 +141,6 @@ HEADERS += \
view/colordialog.h \
view/colorsliderstyle.h \
view/colorsquare.h \
view/customdialog.h \
view/gradientslider.h \
view/maskwidget.h \
view/multitifftoolbtn.h \

View File

@ -1,11 +1,12 @@
#include "colordialog.h"
ColorDialog::ColorDialog(QWidget *parent) : CustomDialog(parent)
ColorDialog::ColorDialog(QWidget *parent) : QDialog(parent)
{
this->setFixedSize(316, 374);
// 窗口属性
this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);//开启窗口无边框
this->setAttribute(Qt::WA_DeleteOnClose);
this->setAttribute(Qt::WA_TranslucentBackground);
m_Layout = new QVBoxLayout(this);
@ -381,3 +382,12 @@ void ColorDialog::setHorizontalSlider()
connect(m_gradientSlider, SIGNAL(valueChanged(int)), sliderHue, SLOT(setValue(int)));
Q_EMIT checkedChanged('H');
}
void ColorDialog::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPainterPath path;
path.addRoundedRect(rect(), 10, 10);
painter.setRenderHint(QPainter::Antialiasing);
painter.fillPath(path, QColor(250, 250, 250));
}

View File

@ -1,6 +1,7 @@
#ifndef COLORDIALOG_H
#define COLORDIALOG_H
#include <QDialog>
#include <QRadioButton>
#include <QDebug>
#include <QGraphicsDropShadowEffect>
@ -15,10 +16,9 @@
#include "colorsquare.h"
#include "gradientslider.h"
#include "view/sizedate.h"
#include "customdialog.h"
#include "maskwidget.h"
class ColorDialog : public CustomDialog
class ColorDialog : public QDialog
{
Q_OBJECT
@ -30,7 +30,7 @@ public:
QColor color() const;
protected:
void paintEvent(QPaintEvent *event);
private:
QVBoxLayout *m_Layout;

View File

@ -1,113 +0,0 @@
#include "customdialog.h"
#include <QProcess>
#include <QPainter>
#include <QPainterPath>
#include <QDebug>
#include <QtDBus/QDBusInterface>
#include <QtDBus/QDBusReply>
#include <QtDBus/QDBusConnection>
#include <QGSettings>
#define KWIN_SERVICE "org.ukui.KWin"
#define KWIN_PATH "/Compositor"
#define KWIN_INTERFACE "org.ukui.kwin.Compositing"
extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
CustomDialog::CustomDialog(QWidget *parent)
:QDialog(parent)
,m_isCompRun(true)
{
m_isCompRun = checkCompositorRunning();
if(m_isCompRun)
setAttribute(Qt::WA_TranslucentBackground, true);
}
CustomDialog::~CustomDialog()
{
}
void CustomDialog::paintEvent(QPaintEvent *event)
{
if(!m_isCompRun)
return QDialog::paintEvent(event);
Q_UNUSED(event);
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
QPainterPath rectPath;
rectPath.addRoundedRect(this->rect().adjusted(10, 10, -10, -10), 6, 6);
// 画一个黑底
QPixmap pixmap(this->rect().size());
pixmap.fill(Qt::transparent);
QPainter pixmapPainter(&pixmap);
pixmapPainter.setRenderHint(QPainter::Antialiasing);
pixmapPainter.setPen(Qt::transparent);
pixmapPainter.setBrush(Qt::black);
pixmapPainter.setOpacity(0.65);
pixmapPainter.drawPath(rectPath);
pixmapPainter.end();
// 模糊这个黑底
QImage img = pixmap.toImage();
qt_blurImage(img, 10, false, false);
// 挖掉中心
pixmap = QPixmap::fromImage(img);
QPainter pixmapPainter2(&pixmap);
pixmapPainter2.setRenderHint(QPainter::Antialiasing);
pixmapPainter2.setCompositionMode(QPainter::CompositionMode_Clear);
pixmapPainter2.setPen(Qt::transparent);
pixmapPainter2.setBrush(Qt::transparent);
pixmapPainter2.drawPath(rectPath);
// 绘制阴影
p.drawPixmap(this->rect(), pixmap, pixmap.rect());
// 绘制一个背景
p.save();
p.fillPath(rectPath,palette().color(QPalette::Base));
p.restore();
}
bool CustomDialog::checkCompositorRunning()
{
QDBusInterface dbus_iface (KWIN_SERVICE, KWIN_PATH, KWIN_INTERFACE, QDBusConnection::sessionBus());
QVariant reply = dbus_iface.property ("active");
bool isfoundCompositingManger = false;
if (reply.toBool()) {
isfoundCompositingManger = true;
}
if(!isfoundCompositingManger)
{
if(QGSettings::isSchemaInstalled("org.gnome.metacity"))
{
QProcess process;
process.start("sh -c \"ps -e |grep metacity\"");
if(process.waitForStarted(100)&&process.waitForFinished(100) && process.readAllStandardOutput().contains("metacity"))
{
QGSettings metacityGSettings("org.gnome.metacity", "/org/gnome/metacity/");
isfoundCompositingManger = metacityGSettings.get("compositing-manager").toBool();
}
}
}
if(!isfoundCompositingManger)
{
if(QGSettings::isSchemaInstalled("org.mate.Marco.general"))
{
QProcess process;
process.start("sh -c \"ps -e |grep marco\"");
if(process.waitForStarted(100)&&process.waitForFinished(100) && process.readAllStandardOutput().contains("marco"))
{
QGSettings marcoGSettings("org.mate.Marco.general", "/org/mate/marco/general/");
isfoundCompositingManger = marcoGSettings.get("compositing-manager").toBool();
}
}
}
return isfoundCompositingManger;
}

View File

@ -1,25 +0,0 @@
#ifndef CUSTOMDIALOG_H
#define CUSTOMDIALOG_H
#include <QDialog>
/*圆角周边阴影特效对话框
*marco窗口管理器
*/
class CustomDialog : public QDialog
{
public :
explicit CustomDialog(QWidget *parent = 0);
~CustomDialog();
protected:
virtual void paintEvent(QPaintEvent *event) override;
private:
bool m_isCompRun;
private:
bool checkCompositorRunning();
};
#endif // CUSTOMDIALOG_H

View File

@ -1462,9 +1462,9 @@ void ReplaceBackgroundWidget::startReplaceBackground()
int y = rightPoint.y() + m_bgLabel1->height() + 10;
kdk::WindowManager::setGeometry(m_colorDialog->windowHandle(), QRect(QPoint(x, y), QSize(m_colorDialog->width(), m_colorDialog->height())));
} else {
QPoint rightPoint = QPoint((sw - this->width()) / 2 + this->width(), (sh - this->height()) / 2 + + BAR_HEIGHT);
QPoint rightPoint = QPoint((sw - this->width()) / 2 + this->width(), (sh - this->height()) / 2 + BAR_HEIGHT);
int x = rightPoint.x() - m_colorDialog->width() - m_customBtn->width() - 30;
int y = rightPoint.y() + m_bgLabel1->height();
int y = rightPoint.y() + m_bgLabel1->height() + 10;
m_colorDialog->move(x, y);
}
return;

View File

@ -71,7 +71,7 @@ static const int CONTROL_INTERVAL_TM = 4;
static const int POSITION_COEFFICIENT_TM = 9; //起始位置系数
static const QSize TOOLBAR_SIZE_INTEL = QSize(700 + 4 + 40 + 16 + 40 + 40 + 25, 64); //工具栏尺寸-intel
static const QSize TOOLBAR_SIZE = QSize(554 + 4 + 40 + 16 + 40 + 16 + 40, 40 + 4); //工具栏尺寸
static const QSize TOOLBAR_SIZE = QSize(554 + 4 + 40 + 16 + 40 + 16 + 40 + 16, 40 + 4); //工具栏尺寸
static const QSize TOOL_BUTTON_INTEL = QSize(48, 48); //工具栏按钮尺寸-intel
static const QSize TOOL_BUTTON = QSize(24, 24); //工具栏按钮尺寸
static const QSize COLOR_BUTTON = QSize(26, 26); //颜色按钮尺寸

View File

@ -92,6 +92,8 @@ ToolBar::ToolBar(QWidget *parent) : QWidget(parent)
m_edit->setArrow(false);
m_edit->setFocusPolicy(Qt::NoFocus);
m_edit->setAutoRaise(true);
QPixmap icon(":/res/res/ai/arrowup.svg");
changeEditIcon(icon);
m_editMenu = new QMenu();
@ -183,10 +185,10 @@ void ToolBar::initControlQss()
m_toolLayout->setSpacing(10);
m_toolLayout->addWidget(m_rotate, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(10);
m_toolLayout->addWidget(m_flipH, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(10);
m_toolLayout->addWidget(m_flipV, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(10);
m_toolLayout->addWidget(m_flipH, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(10);
m_toolLayout->addWidget(m_cutImage, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(10);
m_toolLayout->addWidget(m_line1, 0, Qt::AlignCenter);
@ -220,10 +222,10 @@ void ToolBar::initControlQss()
m_toolLayout->setSpacing(20);
m_toolLayout->addWidget(m_rotate, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(20);
m_toolLayout->addWidget(m_flipH, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(20);
m_toolLayout->addWidget(m_flipV, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(20);
m_toolLayout->addWidget(m_flipH, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(20);
m_toolLayout->addWidget(m_cutImage, 0, Qt::AlignCenter);
m_toolLayout->setSpacing(5);
m_toolLayout->addWidget(m_line1, 0, Qt::AlignCenter);
@ -265,6 +267,14 @@ void ToolBar::initConnect()
connect(m_delImage, &kdk::KBorderlessButton::clicked, this, &ToolBar::delImage);
connect(m_edit, &kdk::KToolButton::clicked, this, &ToolBar::showEditMenu);
connect(m_editMenu, &QMenu::aboutToShow, [=]() {
QPixmap icon(":/res/res/ai/arrowdown.svg");
changeEditIcon(icon);
});
connect(m_editMenu, &QMenu::aboutToHide, [=]() {
QPixmap icon(":/res/res/ai/arrowup.svg");
changeEditIcon(icon);
});
//connect(m_filter, &QAction::triggered, this, &ToolBar::filter);
connect(m_ocr, &QAction::triggered, this, &ToolBar::getText);
connect(m_scanner, &QAction::triggered, this, &ToolBar::scanner);
@ -280,6 +290,24 @@ void ToolBar::showEditMenu()
m_editMenu->exec(menuPos); // 在计算的位置显示菜单
}
void ToolBar::changeEditIcon(QPixmap pix)
{
QPixmap icon1(":/res/res/ai/ai.svg");
QPixmap icon2 = pix;
QPixmap pixmap(40, 24);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.drawPixmap(0, 0, icon1);
int icon2Y = (24 - icon2.height()) / 2;
painter.drawPixmap(icon1.size().width(), icon2Y, icon2);
m_edit->setIcon(QIcon(pixmap));
m_edit->setIconSize(pixmap.size());
m_edit->setFixedSize(40, 24);
}
//改变百分比的数值
void ToolBar::changePerRate(QString num, QString path)
{
@ -650,7 +678,7 @@ void ToolBar::buttonSize(QSize acturalSize)
m_sidebar->setFixedSize(acturalSize);
m_information->setFixedSize(acturalSize);
m_delImage->setFixedSize(acturalSize);
m_edit->setFixedSize(acturalSize);
//m_edit->setFixedSize(40,24);
m_labelbar->setFixedSize(acturalSize);
}
@ -668,7 +696,7 @@ void ToolBar::btnIconSize(QSize iconSize)
m_information->setIconSize(iconSize);
m_delImage->setIconSize(iconSize);
m_labelbar->setIconSize(iconSize);
m_edit->setIconSize(iconSize);
//m_edit->setIconSize(iconSize);
}
void ToolBar::updateCheckBtnQss()
@ -684,12 +712,12 @@ void ToolBar::updateCheckBtnQss()
m_cutImage->setIcon(QIcon(":/res/res/sp1/cutImage.svg"));
// m_filter->setIcon(QIcon(":/res/res/sp1/filter.svg"));
// m_filter->setIconSize(QSize(24, 24));
m_labelbar->setIcon(QIcon(":/res/res/sp1/labelbar.svg"));
m_labelbar->setIcon(QIcon(":/res/res/sp1/mark.svg"));
m_sidebar->setIcon(QIcon(":/res/res/sp1/sidebar.svg"));
m_information->setIcon(QIcon(":/res/res/sp1/information.svg"));
m_delImage->setIcon(QIcon(":/res/res/sp1/delImage.svg"));
m_edit->setIcon(QIcon(":/res/res/ai/ai.svg"));
//m_edit->setIcon(QIcon(":/res/res/ai/ai.svg"));
m_ocr->setIcon(QIcon(":/res/res/ai/ocr.svg"));
m_scanner->setIcon(QIcon(":/res/res/ai/scanner.svg"));
m_imageMatting->setIcon(QIcon(":/res/res/ai/cutout.svg"));

View File

@ -111,7 +111,7 @@ private:
private Q_SLOTS:
void showEditMenu();
void changeEditIcon(QPixmap pix);
Q_SIGNALS:
void showInfor(); //主界面显示信息栏

View File

@ -4,7 +4,7 @@
<context>
<name>ColorDialog</name>
<message>
<location filename="../src/view/colordialog.cpp" line="25"/>
<location filename="../src/view/colordialog.cpp" line="26"/>
<source>Close</source>
<translation></translation>
</message>
@ -12,7 +12,7 @@
<context>
<name>Core</name>
<message>
<location filename="../src/controller/core/core.cpp" line="1023"/>
<location filename="../src/controller/core/core.cpp" line="1028"/>
<source>Add</source>
<translation></translation>
</message>

View File

@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="kk">
<context>
<name>ColorDialog</name>
<message>
<location filename="../src/view/colordialog.cpp" line="26"/>
<source>Close</source>
<translation>Тоқтату</translation>
</message>
</context>
<context>
<name>Core</name>
<message>
@ -416,12 +424,27 @@
<translation>Терезе виджеті</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="92"/>
<source>OCR</source>
<translation>OCR</translation>
<location filename="../src/view/toolbar.cpp" line="90"/>
<source>Intelligent processing</source>
<translation>Интеллектуалды өңдеу</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="106"/>
<location filename="../src/view/toolbar.cpp" line="105"/>
<source>OCR</source>
<translation>Мәтінді тану</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="108"/>
<source>Scanner</source>
<translation>Қара-ақ көшірмелерді сканерлеу</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="111"/>
<source>Matting</source>
<translation>Фонды өзгерту үшін суретті қиып алу</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="125"/>
<source>Markup</source>
<translation>Таңбалау</translation>
</message>

View File

@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ky">
<context>
<name>ColorDialog</name>
<message>
<location filename="../src/view/colordialog.cpp" line="26"/>
<source>Close</source>
<translation>Өчүрүү</translation>
</message>
</context>
<context>
<name>Core</name>
<message>
@ -408,12 +416,27 @@
<translation>Терезе виджет</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="92"/>
<source>OCR</source>
<translation>ОКР</translation>
<location filename="../src/view/toolbar.cpp" line="90"/>
<source>Intelligent processing</source>
<translation>Интеллектуалдык иштетүү</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="106"/>
<location filename="../src/view/toolbar.cpp" line="105"/>
<source>OCR</source>
<translation>Текстти таануу</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="108"/>
<source>Scanner</source>
<translation>Кара-ак көчүрмөлөрдү сканерлеу</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="111"/>
<source>Matting</source>
<translation>Фонун өзгөртүү үчүн сүрөттү кесүү</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="125"/>
<source>Markup</source>
<translation>Маркуп</translation>
</message>

View File

@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ug">
<context>
<name>ColorDialog</name>
<message>
<location filename="../src/view/colordialog.cpp" line="26"/>
<source>Close</source>
<translation>تاقاش </translation>
</message>
</context>
<context>
<name>Core</name>
<message>
@ -416,12 +424,27 @@
<translation>ماس كەلگەن كۆزنەك</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="92"/>
<source>OCR</source>
<translation>OCR</translation>
<location filename="../src/view/toolbar.cpp" line="90"/>
<source>Intelligent processing</source>
<translation>ئەقلىي ئىقتىدارلىق بىر تەرەپ قىلىش </translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="106"/>
<location filename="../src/view/toolbar.cpp" line="105"/>
<source>OCR</source>
<translation>يېزىق پەرقلەندۈرۈش</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="108"/>
<source>Scanner</source>
<translation>ئاق-قارا زاپچاسلارنى سىكاننېرلاش</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="111"/>
<source>Matting</source>
<translation>كولاپ ئارقا كۆرۈنۈشنى ئالماشتۇرماق</translation>
</message>
<message>
<location filename="../src/view/toolbar.cpp" line="125"/>
<source>Markup</source>
<translation>بەلگە قويۇش</translation>
</message>