feat(合入平板代码需要和bug): 合入平板代码需要和bug,合入后可解决相关issue

This commit is contained in:
zoujunnan@kylinos.cn 2023-03-24 16:09:26 +08:00 committed by handsome_feng
parent ca14a918bf
commit d8af2716e7
206 changed files with 4585 additions and 1773 deletions

142
CoverFlow.qml Normal file
View File

@ -0,0 +1,142 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import "./part"
Rectangle {
id: coverflow
anchors.fill: parent
property ListModel imagemodel
property int itemCount: variables.imagelist.length >= 5? 5 : variables.imagelist.length != 0 ? variables.imagelist.length : 1
property int itemMargin: 40 //item
property int itemDistance: coverflow.width + itemMargin //item+
color: "transparent"
signal changeImageFromView(var path,var changeWay) //
property int backItem: -1 //itemindex
property bool stopMove: true //pathvie
property string moveWay: "default"
PathView {
anchors.fill: parent
objectName: "pathWid"
id: pathView
model: imagemodel
movementDirection: moveWay == "default"? PathView.Shortest : moveWay == "back" ? PathView.Negative : PathView.Positive
flickDeceleration:1000//
snapMode: PathView.SnapOneItem
interactive: !stopMove ? false : itemCount <= 1 || variables.navigatorState ? false : true
delegate: Item {
id: delegateItem
width: coverflow.width
height: coverflow.height
clip: true
//
MainImageArea {
objectName: "imageItem"
id: imageArea
x: 0
y: 0
width: mainWindow.width
height: mainWindow.height
imageUrl: url
imageType: type
itemIndex: index
}
}
path: variables.imagelist.length >= 5? coverFlowPath : variables.imagelist.length == 4 ? coverFlowPathFourth : variables.imagelist.length == 3 ? coverFlowPathThird :variables.imagelist.length >= 2 ? coverFlowPathSecond : coverFlowPathFirst
pathItemCount: itemCount
highlightRangeMode: PathView.StrictlyEnforceRange
preferredHighlightBegin: 0.5
preferredHighlightEnd: 0.5
onMovementEnded: {
//
if (variables.imagelist.length - 1 >= pathView.currentIndex) {
if (backItem != pathView.currentIndex) {
if (pathView.currentIndex - backItem > 0) {
if (backItem == 0 && pathView.currentIndex == pathView.count - 1) {
changeImageFromView(variables.imagelist[pathView.currentIndex],false)
} else {
changeImageFromView(variables.imagelist[pathView.currentIndex],true)
}
} else if (pathView.currentIndex - backItem < 0) {
if (pathView.currentIndex == 0 && backItem == pathView.count - 1) {
changeImageFromView(variables.imagelist[pathView.currentIndex],true)
} else {
changeImageFromView(variables.imagelist[pathView.currentIndex],false)
}
}
backItem = pathView.currentIndex
}
} else {
console.log("切换图片失败当前view和图片列表不匹配")
}
//-
for (var i = 0; i < pathView.count; i++) {
if (i !== pathView.currentIndex) {
if (variables.imageListEveryAddType[i]) {
if (model.get(i).url !== "qrc:/res/res/loadgif.gif") {
model.setProperty(i,"url","qrc:/res/res/loadgif.gif")
}
}
}
}
}
Component.onCompleted: {
backItem = pathView.currentIndex
}
}
//item线-pathLine
Path {
id:coverFlowPath
startX: -2*itemDistance - itemMargin / 2
startY: coverflow.height / 2
PathLine {x:-itemDistance - itemMargin / 2; y:coverflow.height / 2 }
PathLine {x:-itemMargin / 2; y:coverflow.height / 2 }
PathLine {x:-itemMargin / 2 + itemDistance; y:coverflow.height / 2 }
PathLine {x:-itemMargin / 2 + 2 * itemDistance; y:coverflow.height / 2 }
PathLine {x:-itemMargin / 2 + 3 * itemDistance; y:coverflow.height / 2 }
}
Path{
id: coverFlowPathFourth
startX: -itemDistance / 2 - itemMargin / 2 - itemDistance
startY: coverflow.height / 2
PathLine { x: -itemDistance / 2 - itemMargin / 2 +itemDistance- itemDistance ; y:coverflow.height / 2 }
PathLine { x: -itemDistance / 2 - itemMargin / 2 + 2*itemDistance- itemDistance ; y:coverflow.height / 2 }
PathLine { x: -itemDistance / 2 - itemMargin / 2 + 3*itemDistance- itemDistance; y:coverflow.height / 2 }
PathLine { x: -itemDistance / 2 - itemMargin / 2 + 4*itemDistance- itemDistance ; y:coverflow.height / 2 }
}
Path{
id: coverFlowPathThird
startX: -itemDistance - itemMargin / 2
startY: coverflow.height / 2
PathLine { x: -itemMargin / 2; y:coverflow.height / 2 }
PathLine { x: -itemMargin / 2 + itemDistance; y:coverflow.height / 2 }
PathLine { x: -itemMargin / 2 + 2 * itemDistance; y:coverflow.height / 2 }
}
Path{
id: coverFlowPathSecond
startX: -itemDistance / 2 - itemMargin / 2
startY: coverflow.height / 2
PathLine { x: -itemDistance / 2 - itemMargin / 2 +itemDistance ; y:coverflow.height / 2 }
PathLine { x: -itemDistance / 2 - itemMargin / 2 + 2*itemDistance; y:coverflow.height / 2 }
}
Path{
id: coverFlowPathFirst
startX: 0
startY: coverflow.height/2
PathLine { x: coverflow.width; y:coverflow.height / 2 }
}
//pathview
function noticeChangeIndex(changeIndex) {
if (pathView.currentIndex === changeIndex) {
return
}
pathView.currentIndex = changeIndex
backItem = pathView.currentIndex
}
}

View File

@ -82,7 +82,13 @@ Mat KylinImageCodec::FI2MAT(FIBITMAP *src)
}
flip(dst, dst, 0);
} else {
FIBITMAP *palletized = FreeImage_ConvertTo8Bits(src);
FIBITMAP *palletized;
//标准位图且位图深度为1的图片
if (bpp == 1 && fit == FIT_BITMAP) {
palletized = FreeImage_ConvertToGreyscale(src);
} else {
palletized = FreeImage_ConvertTo8Bits(src);
}
dst = FI2MAT(palletized);
}

View File

@ -2,17 +2,21 @@
MatResult KylinImageCodec::loadImageToMat(QString path)
{
return loadThumbnailToMat(path, IMREAD_UNCHANGED, QSize(0, 0));
return loadThumbnailToMat(path, "", IMREAD_UNCHANGED, QSize(0, 0));
}
MatResult KylinImageCodec::loadThumbnailToMat(QString path, ImreadModes modes, QSize size)
MatResult KylinImageCodec::loadThumbnailToMat(QString path, QString realFormat, ImreadModes modes, QSize size)
{
MatResult mr;
//获取文件信息
QString suffix;
QFileInfo info(path);
if ("" == realFormat) {
suffix = info.suffix().toLower();
} else {
suffix = realFormat;
}
// svg、gif等opencv不支持的格式
QString suffix = info.suffix().toLower();
if (suffix == "gif" || suffix == "apng" || suffix == "png") {
if ((suffix == "gif" || suffix == "apng" || suffix == "png")) {
mr = loadMovieToMat(path, modes, suffix);
} else if (suffix == "tif" || suffix == "tiff") {
FREE_IMAGE_FORMAT fif = FIF_TIFF;
@ -90,7 +94,7 @@ MatResult KylinImageCodec::loadImageToMat(QString path, ImreadModes modes, QStri
mat = Mat(image.height(), image.width(), CV_8UC3, const_cast<uchar *>(image.bits()),
static_cast<size_t>(image.bytesPerLine()))
.clone();
} else if (m_freeimageSupportFormats.contains(suffix)) {
} else {
mat = loadFreeimageFormat(path.toLocal8Bit().data());
}
// 1通道的bmp图片且freeimage库加载失败opencv读取时会闪退在库中所以直接返回显示为无法读取的图。
@ -99,6 +103,8 @@ MatResult KylinImageCodec::loadImageToMat(QString path, ImreadModes modes, QStri
if (!mat.data) {
mr.mat = mat;
return mr;
} else {
mat = imread(path.toLocal8Bit().data(), IMREAD_COLOR);
}
}
}
@ -271,7 +277,11 @@ FREE_IMAGE_FORMAT KylinImageCodec::get_real_format(const QString &path)
FREE_IMAGE_FORMAT format = FreeImage_GetFileType(temp_path.data());
/* 修复后缀 , 以库解析出来的为准 */
if (format != FIF_UNKNOWN && format != m_formats[file_suffix_upper]) {
int formatCode;
if (m_formats.contains(file_suffix_upper)) {
formatCode = m_formats.value(file_suffix_upper);
}
if (format != FIF_UNKNOWN && format != formatCode) {
file_suffix_upper = m_formats.key(format);
}
if (format == FIF_TIFF) {
@ -374,7 +384,8 @@ FREE_IMAGE_FORMAT KylinImageCodec::get_real_format(const QString &path)
}
/* 根据后缀获取对应的格式 */
format = static_cast<FREE_IMAGE_FORMAT>(m_formats[file_suffix_upper]);
int formatCode1 = m_formats.value(file_suffix_upper);
format = static_cast<FREE_IMAGE_FORMAT>(formatCode1);
return format >= 0 ? format : FIF_UNKNOWN;

View File

@ -2,14 +2,15 @@
QStringList *KylinImageCodec::m_list = new QStringList;
QString KylinImageCodec::m_savePath = "";
bool KylinImageCodec::saveImage(const Mat &mat, const QString &savepath, bool replace)
bool KylinImageCodec::saveImage(const Mat &mat, const QString &savepath, const QString &realFormat, bool replace)
{
return save(mat, saveWay(savepath, replace), QFileInfo(savepath).suffix());
return save(mat, saveWay(savepath, replace), realFormat);
}
bool KylinImageCodec::saveImage(QList<Mat> *list, const int &fps, const QString &savepath, bool replace)
bool KylinImageCodec::saveImage(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat,
bool replace)
{
return save(list, fps, saveWay(savepath, replace));
return save(list, fps, saveWay(savepath, replace), realFormat);
}
QString KylinImageCodec::saveWay(const QString &savepath, bool replace)
@ -54,9 +55,9 @@ bool KylinImageCodec::save(const Mat &mat, const QString &savepath, const QStrin
}
return stbi_write_tga(savepath.toLocal8Bit().data(), tmpMat.cols, tmpMat.rows, 4, tmpMat.data);
}
if (type == "ico" || type == "xpm") {
if (type == "ico" || type == "xpm" || type == "xbm") {
QPixmap pix = converFormat(mat);
return pix.save(savepath);
return pix.save(savepath, type.toLocal8Bit());
}
// if(type == "hdr"){
// Mat tmpMat;
@ -72,43 +73,61 @@ bool KylinImageCodec::save(const Mat &mat, const QString &savepath, const QStrin
if (type == "gif") {
QList<Mat> *list = new QList<Mat>;
list->append(mat);
return save(list, 0, savepath);
return save(list, 0, savepath, type);
}
if (type == "pbm") {
QPixmap pix = converFormat(mat);
return pix.save(savepath);
return pix.save(savepath, type.toLocal8Bit());
}
if (type == "ppm") {
QPixmap pix = converFormat(mat);
return pix.save(savepath);
return pix.save(savepath, type.toLocal8Bit());
}
//如果是freeimage库的图片
if (m_freeimageSupportFormats.contains(type)) {
if (m_freeimageSupportFormats.contains(type) && !g_needSaveAs) {
if (type == "xpm" || type == "xbm" || type == "wbmp" || type == "webp") {
QPixmap pix = converFormat(mat);
return pix.save(savepath);
return pix.save(savepath, type.toLocal8Bit());
}
FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
fif = get_real_format(QString(savepath));
if (fif == FIF_UNKNOWN) {
fif = get_real_format(QString(savepath) + "." + type);
}
return saveFreeImage(savepath, mat, fif);
}
//非特殊情况
return imwrite(savepath.toStdString(), mat);
QFileInfo fileInfo(savepath);
if (m_supportFormats.contains(fileInfo.suffix().toLower())) {
if (g_needSaveAs) {
g_needSaveAs = false;
return imwrite(savepath.toStdString(), mat);
}
if (type == fileInfo.suffix().toLower()) {
return imwrite(savepath.toStdString(), mat);
} else if (type == "ras" && fileInfo.suffix().toLower() == "sr") {
return imwrite(savepath.toStdString(), mat);
} else {
qDebug() << "保存失败";
return false;
}
}
qDebug() << "不支持该图片的保存";
return false;
}
bool KylinImageCodec::save(QList<Mat> *list, const int &fps, const QString &savepath)
bool KylinImageCodec::save(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat)
{
if (list->length() < 1) {
return false;
}
return saveMovie(list, fps, savepath);
return saveMovie(list, fps, savepath, realFormat);
}
bool KylinImageCodec::saveMovie(QList<Mat> *list, const int &fps, const QString &savepath)
bool KylinImageCodec::saveMovie(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat)
{
SaveMovie *saveMovie = new SaveMovie(list, fps, savepath, m_list);
SaveMovie *saveMovie = new SaveMovie(list, fps, savepath, realFormat, m_list);
connect(saveMovie, &SaveMovie::saveMovieFinish, getSignalObj(), &KylinImageCodecSignals::saveMovieFinish);
saveMovie->start();
// Gif_H m_Gif;

View File

@ -3,13 +3,15 @@
//临时文件路径
const QString SaveMovie::TEMP_PATH = SaveMovie::creatTempPath();
SaveMovie::SaveMovie(QList<Mat> *list, const int &fps, const QString &savepath, QStringList *savelist)
SaveMovie::SaveMovie(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat,
QStringList *savelist)
{
//结束回收资源
connect(this, &SaveMovie::finished, this, &SaveMovie::deleteLater);
m_fps = fps;
m_savepath = savepath;
m_savelist = savelist;
m_realFormat = realFormat;
m_list = new QList<Mat>;
for (Mat &mat : *list) {
m_list->append(mat.clone());
@ -36,7 +38,13 @@ void SaveMovie::run()
QFileInfo info(m_savepath);
QString name = info.completeBaseName();
QString tmpName = info.completeBaseName() + "_tmp";
QString suffix = info.suffix().toLower();
QString suffix;
if ("" == m_realFormat) {
suffix = info.suffix().toLower();
} else {
suffix = m_realFormat;
}
QString tmpDir = TEMP_PATH + name + "/";
QString ster = "\"";
//新建目录

View File

@ -9,12 +9,13 @@ KylinImageCodecSignals *KylinImageCodec::getSignalObj()
}
return m_signalObj;
}
bool KylinImageCodec::g_needSaveAs = false;
const QStringList KylinImageCodec::m_opencvSupportFormats =
{ //"exr","EXR",有问题opencv只支持其查看不支持写入。此格式支持设置为壁纸
"jpg", "jpe", "jpeg", "pbm", "pgm", "ppm", "sr", "ras", "png"};
"sr", "ras"};
const QStringList KylinImageCodec::m_freeimageSupportFormats = { // 10种可读取可保存的格式
"exr", "psd", "jfi", "jif", "jp2", "j2k", "jng", "wbmp", "xbm", "pnm", "tiff", "tif", "webp", "bmp", "dib"};
"exr", "psd", "jfi", "jif", "jp2", "j2k", "jng", "wbmp", "xbm", "pnm", "tiff",
"tif", "webp", "bmp", "dib", "png", "jpg", "jpe", "jpeg", "pbm", "pgm", "ppm"};
const QStringList KylinImageCodec::m_otherSupportFormats = {"tga", "svg", "gif", "apng", "ico", "xpm"};
const QString KylinImageCodec::m_supportFrmatsClassify = "(*.jpg *.jpe *.jpeg);;"
"(*.pnm *.pbm);;"
@ -32,7 +33,36 @@ const QStringList KylinImageCodec::m_supportFormats = KylinImageCodec::m_opencvS
+ KylinImageCodec::m_freeimageSupportFormats
+ KylinImageCodec::m_otherSupportFormats;
const QStringList KylinImageCodec::m_supportFormatsMT = {"image/vnd.microsoft.icon",
"image/x-jp2-codestream",
"image/vnd.adobe.photoshop",
"image/webp",
"image/svg+xml",
"image/x-jng",
"image/jp2",
"image/gif",
"image/vnd.wap.wbmp",
"image/x-xbitmap",
"image/x-xpixmap",
"image/x-exr",
"image/x-portable-graymap",
"image/x-portable-anymap",
"image/x-portable-pixmap",
"image/x-cmu-raster",
"image/x-portable-bitmap",
"image/x-tga",
"image/x-sun-raster",
"image/bmp",
"image/jpeg",
"image/tiff",
"image/png"};
QHash<QString, int> KylinImageCodec::m_formats = KylinImageCodec::creatFormats();
QStringList KylinImageCodec::g_allFormat = {
"BMP", "ICO", "JPG", "JPE", "JPS", "JPEG", "KOALA", "KOA", "LBM", "IFF", "MNG", "PBM",
"PBMRAW", "PCD", "PCX", "PGM", "PGMRAW", "PNG", "PPM", "PPMRAW", "RAS", "TGA", "TARGA", "TIFF",
"TIF", "PCT", "PIC", "PICT", "WEBP", "JXR", "PFM", "DDS", "GIF", "HDR", "FAX", "G3",
"SGI", "CUT", "JNG", "WBMP", "PSD", "XBM", "XPM", "EXR", "JP2", "J2K"};
QHash<QString, int> KylinImageCodec::creatFormats()
{
QHash<QString, int> tmpFormats;
@ -84,7 +114,18 @@ QHash<QString, int> KylinImageCodec::creatFormats()
tmpFormats.insert("J2K", FIF_J2K);
return tmpFormats;
}
QStringList KylinImageCodec::g_jpegList = {"jpg", "jpe", "jps", "jpeg", "jif", "jfi"};
QStringList KylinImageCodec::g_bmpList = {"bmp", "dib"};
QStringList KylinImageCodec::g_koaList = {"koa", "koala"};
QStringList KylinImageCodec::g_lbmList = {"lbm", "iff"};
QStringList KylinImageCodec::g_tgaList = {"tga", "targa"};
QStringList KylinImageCodec::g_tiffList = {"tiff", "tif"};
QStringList KylinImageCodec::g_pictList = {"pct", "pic", "pict"};
QStringList KylinImageCodec::g_faxList = {"fax", "g3"};
QStringList KylinImageCodec::g_pngList = {"png", "apng"};
QStringList KylinImageCodec::g_otherFormatList = {"sr", "ras", "exr", "psd", "jp2", "j2k", "jng", "wbmp",
"xbm", "pnm", "webp", "svg", "gif", "ico", "xpm"};
QStringList KylinImageCodec::g_pbmList = {"pbm", "pgm", "ppm"};
QStringList KylinImageCodec::getSupportFormats()
{
return m_supportFormats;

View File

@ -34,17 +34,34 @@ class KYLINIMAGECODEC_EXPORT KylinImageCodec : public KylinImageCodecSignals
public:
static KylinImageCodecSignals *getSignalObj();
static MatResult loadImageToMat(QString path);
static MatResult loadThumbnailToMat(QString path, ImreadModes modes = IMREAD_REDUCED_COLOR_8,
QSize size = QSize(94, 56));
static MatResult loadThumbnailToMat(QString path, QString realFormat = "",
ImreadModes modes = IMREAD_REDUCED_COLOR_8, QSize size = QSize(94, 56));
static QStringList getSupportFormats();
static QString getOpenFileFormats();
static QPixmap converFormat(const Mat &mat);
static bool saveImage(const Mat &mat, const QString &savepath, bool replace = true);
static bool saveImage(QList<Mat> *list, const int &fps, const QString &savepath, bool replace = true);
static bool saveImage(const Mat &mat, const QString &savepath, const QString &realFormat, bool replace = true);
static bool saveImage(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat,
bool replace = true);
static bool isSaving(const QString &path);
static bool allSaveFinish();
static QString savePath();
//获取文件格式
static FREE_IMAGE_FORMAT get_real_format(const QString &path);
static QHash<QString, int> m_formats;
static QStringList g_jpegList;
static QStringList g_bmpList;
static QStringList g_koaList;
static QStringList g_lbmList;
static QStringList g_tgaList;
static QStringList g_tiffList;
static QStringList g_pictList;
static QStringList g_faxList;
static QStringList g_pngList;
static QStringList g_pbmList;
static QStringList g_allFormat;
static QStringList g_otherFormatList;
static bool g_needSaveAs;
private:
static MatResult loadImageToMat(QString path, ImreadModes modes, QString suffix, QSize size);
@ -52,17 +69,16 @@ private:
static int getDelay(const QString &path, const QString &suffix);
static int gifDelay(const QString &path);
static Mat loadFreeimageFormat(const char *filename); // freeimage库加载图片
static FREE_IMAGE_FORMAT get_real_format(const QString &path);
static Mat FI2MAT(FIBITMAP *src); //转mat
static Mat FI2MAT(FIBITMAP *src); //转mat
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);
static bool saveMovie(QList<Mat> *list, const int &fps, const QString &savepath);
static bool save(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat);
static bool saveMovie(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat);
static bool saveFreeImage(const QString &path, Mat mat, FREE_IMAGE_FORMAT); //保存freeimage格式图片
static bool mat2fibitmap(Mat mat, FREE_IMAGE_FORMAT, QString);
static fipImage mat2RgbFipImage(Mat mat); //转为
static QHash<QString, int> creatFormats();
static QHash<QString, int> m_formats;
static KylinImageCodecSignals *m_signalObj;
static QStringList *m_list; //用来保存正在保存的动图队列
static const QStringList m_supportFormats; // opencv支持的格式列表
@ -71,6 +87,9 @@ private:
static const QStringList m_freeimageSupportFormats; // libfreeimage支持的格式列表
static const QStringList m_otherSupportFormats; //其他支持格式列表
static QString m_savePath; //图片保存路径
// mime-type
static const QStringList m_supportFormatsMT; // opencv支持的格式列表
};
#endif // KYLIN_IMAGE_CODEC_H

View File

@ -19,7 +19,8 @@ Q_SIGNALS:
void saveMovieFinish(const QString &path);
public:
SaveMovie(QList<Mat> *list, const int &fps, const QString &savepath, QStringList *savelist = nullptr);
SaveMovie(QList<Mat> *list, const int &fps, const QString &savepath, const QString &realFormat,
QStringList *savelist = nullptr);
protected:
void run();
@ -35,6 +36,7 @@ private:
void processLog();
static const QString TEMP_PATH; //临时文件路径
static const QString creatTempPath(); //创建临时目录
QString m_realFormat = "";
};
#endif // SAVEMOVIE_H

View File

@ -1,7 +1,7 @@
#include <libkyocr.hpp>
#include "kylinocr.h"
#include <QDebug>
KylinOCR::KylinOCR() {}
void KylinOCR::getText(QString imgPath)

View File

@ -14,4 +14,4 @@ Exec=/usr/bin/kylin-photo-viewer %u
Icon=kylin-photo-viewer
Type=Application
Categories=Graphics;
MimeType=application/ico;application/x-navi-animation;audio/x-riff;image/bmp;image/gif;image/ico;image/icon;image/jpeg;image/jpg;image/jpx;image/pjpeg;image/png;image/qtif;image/svg;image/svg+xml;image/svg+xml-compressed;image/svg-xml;image/tiff;image/vnd.adobe.svg+xml;image/vnd.microsoft.icon;image/vnd.wap.wbmp;image/webp;image/x-MS-bmp;image/x-adobe-dng;image/x-bmp;image/x-canon-cr2;image/x-canon-crw;image/x-compressed-xcf;image/x-epson-erf;image/x-fuji-raf;image/x-gray;image/x-icb;image/x-icns;image/x-ico;image/x-icon;image/x-minolta-mrw;image/x-nikon-nef;image/x-olympus-orf;image/x-pcx;image/x-pentax-pef;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-quicktime;image/x-sony-arw;image/x-tga;image/x-win-bitmap;image/x-wmf;image/x-xbitmap;image/x-xcf;image/x-xpixmap;text/ico;text/xml-svg;image/x-sun-raster;image/x-cmu-raster;
MimeType=application/ico;application/x-navi-animation;audio/x-riff;image/bmp;image/gif;image/ico;image/icon;image/jpeg;image/jpg;image/jpx;image/pjpeg;image/png;image/qtif;image/svg;image/svg+xml;image/svg+xml-compressed;image/svg-xml;image/tiff;image/vnd.adobe.svg+xml;image/vnd.microsoft.icon;image/vnd.wap.wbmp;image/webp;image/x-MS-bmp;image/x-adobe-dng;image/x-bmp;image/x-canon-cr2;image/x-canon-crw;image/x-compressed-xcf;image/x-epson-erf;image/x-fuji-raf;image/x-gray;image/x-icb;image/x-icns;image/x-ico;image/x-icon;image/x-minolta-mrw;image/x-nikon-nef;image/x-olympus-orf;image/x-pcx;image/x-pentax-pef;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-quicktime;image/x-sony-arw;image/x-tga;image/x-win-bitmap;image/x-wmf;image/x-xbitmap;image/x-xcf;image/x-xpixmap;text/ico;text/xml-svg;image/x-sun-raster;image/x-cmu-raster;image/jp2;image/x-exr;image/x-psd;

View File

@ -4,6 +4,11 @@
<default>""</default>
<summary>imagePath</summary>
<description>imagePath</description>
</key>
<key name="sidebar-state" type="i">
<default>0</default>
<summary>sidebarState</summary>
<description>sidebarState</description>
</key>
<key name="log-level" type="s">
<default>"critical"</default>

11
debian/changelog vendored
View File

@ -1,3 +1,14 @@
kylin-photo-viewer (1.3.0.3-ok10) yangtze; urgency=medium
* BUG号# issues/I64UTA 【看图】【需求15193】无法复制图片
#issues/I5XDFE 【次要】【看图】【平板模式】单击图片打开后,图片未居中显示
# issues/I64UQT 双击窗口内位置无法最大化
* 需求号:无
* 其他改动说明:合入平板平板需要 19807以及合入通用bug的解决方案
* 影响域:合入平板平板需要 19807bug和issue修复
-- zoujunnan <zoujunnan@kylinos.cn> Tue, 03 Jan 2023 18:43:28 +0800
kylin-photo-viewer (1.3.0.3-ok9build2) yangtze; urgency=medium
* BUG号# issue I64UTA【看图】【需求15193】无法复制图片

View File

@ -33,27 +33,36 @@ function checkComboForShortcut(combo, wheelDelta) {
function whatToDoWithFoundShortcut(sh, wheelDelta) {
var cmd = sh[1]
var obj
for(var i=0; i<coverFLow.children.length; i++){
if(coverFLow.children[i] instanceof PathView){
for (var j = 0; j <coverFLow.children[i].currentItem.children.length;j++ ) {
if (coverFLow.children[i].currentItem.children[j] instanceof Item) {
obj =coverFLow.children[i].currentItem.children[j]
}
}
}
}
if(cmd === "__zoomIn") {
imageArea.zoomIn(wheelDelta)
obj.zoomIn(wheelDelta)
} else if (cmd === "__zoomOut") {
imageArea.zoomOut(wheelDelta)
obj.zoomOut(wheelDelta)
} else if(cmd === "__zoomReset") {
imageArea.zoomReset()
obj.zoomReset()
} else if(cmd === "__zoomActual") {
imageArea.zoomActual()
obj.zoomActual()
} else if(cmd === "__rotateL") {
imageArea.rotate(-variables.angle90)
obj.rotate(-variables.angle90)
} else if(cmd === "__rotateR") {
imageArea.rotate(variables.angle90)
obj.rotate(variables.angle90)
} else if(cmd === "__rotate0") {
imageArea.rotateReset()
obj.rotateReset()
} else if(cmd === "__flipH") {
imageArea.mirrorH()
obj.mirrorH()
} else if(cmd === "__flipV") {
imageArea.mirrorV()
obj.mirrorV()
} else if(cmd === "__flipReset") {
imageArea.mirrorReset()
obj.mirrorReset()
}
}

View File

@ -27,16 +27,15 @@ import "./MouseAreaBase.js" as MouseAreaBase
Item {
anchors.fill: parent
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton|Qt.RightButton|Qt.MiddleButton
hoverEnabled: true
cursorShape: Qt.ArrowCursor
property int angleDeltaX: 0
property int angleDeltaY: 0
onWheel: {
var combo = ""
@ -44,6 +43,7 @@ Item {
angleDeltaX += wheel.angleDelta.x
angleDeltaY += wheel.angleDelta.y
variables.wheelVaule = Qt.point(angleDeltaX, angleDeltaY)
MouseAreaBase.checkComboForShortcut(combo, Qt.point(angleDeltaX, angleDeltaY))
angleDeltaX = 0
@ -52,7 +52,7 @@ Item {
variables.wheelChange = !variables.wheelChange
}
}
}
}
}

View File

@ -46,13 +46,15 @@ Item {
property int mouseDragType: -1
property bool startAni: true
signal buriedPoint()
property bool aniStop: false
AnimatedImage {
id: theImage
objectName: "image"
property real curX: imageNormal.width/2 - width/2
property real curY: imageNormal.height/2 - height/2
property real realCurX
property real realCurY
property int index: parent.parent.parent.itemIndex
x: curX
y: curY
focus: true
@ -61,7 +63,7 @@ Item {
clip: true
cache: false
asynchronous: true
source: "qrc:/res/res/kyview_logo.png"
source: parent.parent.parent.imageUrl
mirror: false
//
smooth: (width * scale > variables.curWidW || height > variables.curWidH)
@ -70,9 +72,15 @@ Item {
rotation: 0
property real rotateTo: 0
onRotateToChanged: {
if (isMoiveRunning()) {
return
}
rotation = rotateTo
}
onRotationChanged: {
if (isMoiveRunning()) {
return
}
if(!rotani.running) {
rotateTo = rotation
}
@ -84,7 +92,7 @@ Item {
Behavior on x {
PropertyAnimation {
id: xani
duration: startAni ? variables.imageAniDuration : 0
duration: variables.startAni ? variables.imageAniDuration : 0
easing.type: Easing.OutCubic
}
}
@ -92,14 +100,14 @@ Item {
Behavior on y {
PropertyAnimation {
id: yani
duration: startAni ? variables.imageAniDuration : 0
duration: variables.startAni ? variables.imageAniDuration : 0
easing.type: Easing.OutCubic
}
}
Behavior on rotation {
PropertyAnimation {
id: rotani
duration: startAni ? variables.imageAniDuration : 0
duration: variables.startAni ? variables.imageAniDuration : 0
onRunningChanged: {
if (!rotani.running) {
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
@ -111,23 +119,26 @@ Item {
Behavior on scale {
PropertyAnimation {
id: scaleani
duration: startAni ? variables.imageAniDuration : 0
duration: variables.startAni ? variables.imageAniDuration : 0
onRunningChanged: {
if (!scaleani.running) {
aniStop = true
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
} else {
aniStop = false
}
}
easing.type: Easing.OutCubic
}
}
onXChanged: {
if (isMoiveRunning()) {
return
}
setDrogLimit()
}
onYChanged: {
if (isMoiveRunning()) {
return
}
setDrogLimit()
}
@ -136,6 +147,9 @@ Item {
}
function changeScale(scaleValue) {
if (isMoiveRunning()) {
return
}
imageBase.setImageScaleWithImageUpdate(theImage,scaleValue)
}
@ -145,49 +159,71 @@ Item {
//
function imagePostionReset() {
if (isMoiveRunning()) {
return
}
imageBase.resetImagePostion(theImage)
}
onStatusChanged: {
if (isMoiveRunning()) {
return
}
if (theImage.status == Image.Ready) {
theImage.source = imageNormal.imagePath
// theImage.source = imageNormal.imagePath
if (newImageLoaded) {
theImage.imagePostionReset()
}
}
}
onSourceChanged: {
if (isMoiveRunning()) {
return
}
variables.startAni = false
theImage.imagePostionReset()
variables.startAni = true
}
function setSource(imagePath) {
if (isMoiveRunning()) {
return
}
imageNormal.imagePath = imagePath
theImage.source = imageNormal.imagePath
}
function changeImage(imageUrl,imageWidth,imageHeight) {
if (isMoiveRunning()) {
return
}
if (variables.operateImageWay === 12) {
theImage.source = ""
startAni = false
variables.startAni = false
theImage.x = variables.curWidW / 2 - imageWidth / 2
theImage.y = variables.curWidH / 2 - imageHeight / 2
imageNormal.imagePath = imageUrl
theImage.source = imageNormal.imagePath
startAni = true
variables.startAni = true
}
if (variables.operateImageWay === 17) {
theImage.source = ""
startAni = false
variables.startAni = false
theImage.x = variables.curWidW / 2 - imageWidth / 2 + imageWidth + 10
theImage.y = variables.curWidH / 2 - imageHeight / 2
imageNormal.imagePath = imageUrl
theImage.source = imageNormal.imagePath
startAni = true
variables.startAni = true
theImage.x = variables.curWidW / 2 - imageWidth / 2
}
if (variables.operateImageWay === 18) {
theImage.source = ""
startAni = false
variables.startAni = false
theImage.x = - imageWidth - 10
theImage.y = variables.curWidH / 2 - imageHeight / 2
imageNormal.imagePath = imageUrl
theImage.source = imageNormal.imagePath
startAni = true
variables.startAni = true
theImage.x = variables.curWidW / 2 - imageWidth / 2
}
@ -198,6 +234,12 @@ Item {
onWheelChangeChanged: {
buriedPoint()
}
//story 19807
onNeedRestoreOrigChanged: {
imageBase.imageRestore(theImage)
}
//story 19807
}
PinchArea {
@ -214,24 +256,23 @@ Item {
onPinchStarted: {
initialScale = theImage.curScale
buriedPoint()
}
onPinchUpdated: {
if (isMoiveRunning()) {
return
}
//
startAni = false
variables.startAni = false
variables.recordCurrentImageHasOperate = true
if (!imageNeedCenterZoom) {
imageBase.performZoom(theImage,theImage.mapFromItem(pincharea,pinch.center.x, pinch.center.y), undefined, false, false, true, (initialScale*pinch.scale)/theImage.curScale)
} else {
imageBase.performZoom(theImage,theImage.mapFromItem(pincharea, mainWindow.width/2, mainWindow.height/2), undefined, false, false, true,(initialScale*pinch.scale)/theImage.curScale)
theImage.imagePostionReset()
}
//
startAni = true
variables.startAni = true
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
MouseArea {
@ -245,26 +286,45 @@ Item {
propagateComposedEvents:true //穿
onPressAndHold: {
if (isMoiveRunning()) {
return
}
variables.mousePos = mousearea.mapToItem(bgimage, Qt.point(mouse.x, mouse.y))
}
onReleased: {
theImage.curX = theImage.x
theImage.curY = theImage.y
theImage.x = Qt.binding(function() { return theImage.curX })
theImage.y = Qt.binding(function() { return theImage.curY })
if (isMoiveRunning()) {
return
}
if (variables.doubleRestore) {
variables.doubleRestore = false
return
} else {
theImage.curX = theImage.x
theImage.curY = theImage.y
theImage.x = Qt.binding(function() { return theImage.curX })
theImage.y = Qt.binding(function() { return theImage.curY })
}
imageBase.controlImageInWid(theImage)
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
if (variables.imageIsDrag) {
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
variables.imageIsDrag = false
}
}
onPositionChanged: {
if (isMoiveRunning()) {
return
}
variables.imageIsDrag = true
variables.recordCurrentImageHasOperate = true
setDrogLimit()
imageBase.imageActuralLeftUpPos(theImage,theImage.x,theImage.y)
imageBase.makeSureNavigatorNeedShow(theImage)
if (!variables.historyScale) {
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
}
@ -294,14 +354,18 @@ Item {
if (needWheelReact == false) {
return
}
variables.recordCurrentImageHasOperate = true
if (wheelDelta != undefined && !imageNeedCenterZoom) {
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, true, false, false)
} else {
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, mainWindow.width/2, mainWindow.height/2), undefined, true, false, false)
theImage.imagePostionReset()
}
variables.operateImageWay = 1
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
onZoomOut: {
@ -312,14 +376,17 @@ Item {
if (needWheelReact == false) {
return
}
variables.recordCurrentImageHasOperate = true
if (wheelDelta != undefined && !imageNeedCenterZoom) {
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, false, false, false)
} else {
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, mainWindow.width/2, mainWindow.height/2), undefined, false, false, false)
theImage.imagePostionReset()
}
variables.operateImageWay = 2
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
onRotate: {
if (isMoiveRunning()) {
@ -335,11 +402,11 @@ Item {
}
var old = theImage.mirror
theImage.mirror = !old
startAni = false
variables.startAni = false
if (theImage.rotateTo / variables.angle90 % 2 != 0) {
theImage.rotateTo += variables.angle180
}
startAni = true
variables.startAni = true
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
}
onMirrorV: {
@ -348,16 +415,19 @@ Item {
}
var old = theImage.mirror
theImage.mirror = !old
startAni = false
variables.startAni = false
if (theImage.rotateTo / variables.angle90 % 2 == 0) {
theImage.rotateTo += variables.angle180
}
startAni = true
variables.startAni = true
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
}
}
function setCurScale(zoomfactor) {
if (isMoiveRunning()) {
return
}
var curScale = theImage.curScale * zoomfactor
if (curScale > 100 ) {
@ -370,7 +440,7 @@ Item {
}
function operateImage(operateWay) {
if (container.imageType === 0) {
if (isMoiveRunning()) {
return
}
variables.operateImageWay = operateWay
@ -381,18 +451,34 @@ Item {
//
container.zoomOut(undefined)
} else if (operateWay === 3) {
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
//
container.rotate(-variables.angle90)
theImage.imagePostionReset()
} else if (operateWay === 4) {
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
//
container.rotate(variables.angle90)
theImage.imagePostionReset()
} else if (operateWay === 5) {
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
//
container.mirrorH()
theImage.imagePostionReset()
} else if (operateWay === 6) {
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
//
container.mirrorV()
theImage.imagePostionReset()
@ -410,12 +496,22 @@ Item {
}
//
if (operateWay === 12 || operateWay === 17 || operateWay === 18) {
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
// newImageLoaded = true
// variables.startAni = false
// theImage.imagePostionReset()
// variables.startAni = true
newImageLoaded = true
startAni = false
variables.startAni = false
theImage.rotateTo = 0
startAni = true
theImage.mirror = false
theImage.imagePostionReset()
variables.startAni = true
} else {
newImageLoaded = false
}
@ -427,10 +523,11 @@ Item {
}
//
function isMoiveRunning() {
if (container.imageType === 0) {
return true
} else {
var currentImagePath = "file://" + variables.currentPath
if ((currentImagePath === theImage.source.toString() || theImage.source.toString() === "qrc:/res/res/loadgif.gif") && variables.currentImageIndex == theImage.index) {
return false
} else {
return true
}
}
@ -510,16 +607,25 @@ Item {
}
if(!variables.navigatorState) {
mousearea.enabled = false
mousearea.drag.axis = Drag.None
} else {
mousearea.enabled = true
}
}
function adjustImagePostion() {
function adjustImagePostion(needRecord) {
setDrogLimit()
imageBase.controlImageInWid(theImage)
if (needRecord === true) {
variables.recordCurrentImageHasOperate = true
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
}
function updatePosAccordingToWidSizeChange() {
function updatePosAccordingToWidSizeChange(needRecord) {
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
if (needRecord === true) {
variables.recordCurrentImageHasOperate = true
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
}
}

View File

@ -23,6 +23,13 @@
import QtQuick 2.12
Item {
function recordCUrrentPOsAndScaleInfo(imageObj) {
variables.historyScale = imageObj.curScale
variables.historyX = imageObj.curX
variables.historyY = imageObj.curY
}
//-
function resetImagePostion(imageObj) {
@ -30,11 +37,96 @@ Item {
imageObj.curY = imageObj.parent.height/2 - imageObj.height/2
imageObj.x = Qt.binding(function() { return imageObj.curX })
imageObj.y = Qt.binding(function() { return imageObj.curY })
if (variables.operateImageWay === 7 || variables.operateImageWay === 0
|| variables.operateImageWay === 11 || variables.operateImageWay === 12
|| variables.operateImageWay === 17 || variables.operateImageWay === 18) {
variables.origX = imageObj.curX
variables.origY = imageObj.curY
}
}
// : 退ocr退ocr
function setImageScaleWithImageUpdate(imageObj,scaleValue) {
imageObj.curScale = scaleValue
if (variables.operateImageWay === 7 || variables.operateImageWay === 0
|| variables.operateImageWay === 11 || variables.operateImageWay === 12
|| variables.operateImageWay === 17 || variables.operateImageWay === 18) {
variables.origScale = scaleValue
}
}
//story 19807
//
function imageRestore(imageObj) {
var currentImagePath = "image://main/" + variables.currentPath
if (variables.imageListEveryAddType[variables.currentImageIndex]) {
currentImagePath = "file://" + variables.currentPath
}
if (currentImagePath !== imageObj.source.toString()) {
return
}
variables.doubleRestore = true
if (variables.operateImageWay === 7 || variables.operateImageWay === 0
|| variables.operateImageWay === 11 || variables.operateImageWay === 12
|| variables.operateImageWay === 17 || variables.operateImageWay === 18
|| variables.operateImageWay === 3|| variables.operateImageWay === 4
|| variables.operateImageWay === 5|| variables.operateImageWay === 6) {
if ((!variables.recordCurrentImageHasOperate && variables.historyScale == 0) || variables.origScale == variables.historyScale) {
if (imageObj.curScale === variables.origScale) {
imageObj.curScale *= 2
imageObj.realCurX = mainWindow.width/2 - imageObj.width*imageObj.scale/2
imageObj.realCurY = mainWindow.height/2 - imageObj.height*imageObj.scale/2
resetImagePostion(imageObj)
imageActuralLeftUpPos(imageObj,imageObj.curX,imageObj.curY)
makeSureNavigatorNeedShow(imageObj)
imageObj.parent.sendScale(imageObj.curScale * 100)
} else {
variables.recordCurrentImageHasOperate = false
variables.restoreOrigToToolbar = !variables.restoreOrigToToolbar
makeSureNavigatorNeedShow(imageObj)
}
} else {
if (imageObj.curScale === variables.origScale) {
if (!variables.historyScale) {
imageObj.curScale *= 2
imageObj.realCurX = mainWindow.width/2 - imageObj.width*imageObj.scale/2
imageObj.realCurY = mainWindow.height/2 - imageObj.height*imageObj.scale/2
resetImagePostion(imageObj)
imageActuralLeftUpPos(imageObj,imageObj.curX,imageObj.curY)
makeSureNavigatorNeedShow(imageObj)
imageObj.parent.sendScale(imageObj.curScale * 100)
} else {
variables.restoreToHistory = true
imageObj.curX = variables.historyX
imageObj.curY = variables.historyY
imageObj.curScale = variables.historyScale
imageActuralLeftUpPos(imageObj,imageObj.curX,imageObj.curY)
makeSureNavigatorNeedShow(imageObj)
variables.restoreToHistory = false
variables.recordCurrentImageHasOperate = false
imageObj.parent.sendScale(imageObj.curScale * 100)
}
} else {
variables.recordCurrentImageHasOperate = false
variables.restoreOrigToToolbar = !variables.restoreOrigToToolbar
makeSureNavigatorNeedShow(imageObj)
}
}
} else {
if (variables.recordCurrentImageHasOperate) {
variables.recordCurrentImageHasOperate = false
//c++
variables.restoreOrigToToolbar = !variables.restoreOrigToToolbar
}
}
}
//story 19807
//
function getImageScale(imageObj) {
return imageObj.curScale * variables.scalingconstant
@ -43,6 +135,10 @@ Item {
//
function performZoom(theImage, pos, wheelDelta, zoom_in, zoom_actual, zoom_pinch, zoom_pinchfactor) {
if (variables.restoreToHistory) {
pos = variables.histortPos
}
if (wheelDelta !== undefined) {
if (wheelDelta.y > 12) {
wheelDelta.y = 12
@ -87,6 +183,10 @@ Item {
zoomfactor = 0.05 / theImage.curScale
}
}
if (variables.controlImageDoubleScale == true) {
zoomfactor = 2 / theImage.curScale
}
// update x/y position of image
var realX = (pos.x - theImage.width/2) * theImage.curScale
var realY = (pos.y - theImage.height/2) * theImage.curScale
@ -132,20 +232,19 @@ Item {
var actualY
var actualX
if (theImageCurY >= 0) {
actualY = theImageCurY + theImage.height / 2 - (theImage.height * theImage.scale) / 2
actualY = theImageCurY + theImage.height / 2 - (theImage.height * theImage.curScale) / 2
} else {
actualY = theImage.height / 2 - Math.abs(theImageCurY) - theImage.height / 2 * theImage.scale
actualY = theImage.height / 2 - Math.abs(theImageCurY) - theImage.height / 2 * theImage.curScale
}
if (theImageCurX >= 0) {
actualX = theImageCurX + theImage.width / 2 - (theImage.width * theImage.scale) / 2
actualX = theImageCurX + theImage.width / 2 - (theImage.width * theImage.curScale) / 2
} else {
actualX = theImage.width / 2 - Math.abs(theImageCurX) - theImage.width / 2 * theImage.scale
actualX = theImage.width / 2 - Math.abs(theImageCurX) - theImage.width / 2 * theImage.curScale
}
if(Math.abs(theImage.rotateTo % variables.angle360) == variables.angle90 || Math.abs(theImage.rotateTo % variables.angle360) == variables.angle270) {
actualX = actualX + theImage.width * theImage.scale / 2 - theImage.height * theImage.scale / 2
actualY = actualY + theImage.height * theImage.scale / 2 - theImage.width * theImage.scale /2
actualX = actualX + theImage.width * theImage.curScale / 2 - theImage.height * theImage.curScale / 2
actualY = actualY + theImage.height * theImage.curScale / 2 - theImage.width * theImage.curScale /2
}
theImage.parent.imageLeftUpX = actualX
theImage.parent.imageLeftUpY = actualY

View File

@ -63,8 +63,6 @@ Item {
property double realHeight : 0
property rect paintblurRect
signal buriedPoint()
property bool aniStop: false
Image {
objectName: "image"
@ -73,6 +71,7 @@ Item {
property real curY: imageNormal.height/2 - height/2
property real realCurX
property real realCurY
property int index: parent.parent.parent.itemIndex
x: curX
y: curY
@ -89,16 +88,22 @@ Item {
smooth: (width * scale > variables.curWidW || height > variables.curWidH)
//使mipmapmipmap
mipmap: (scale < defaultScale || (scale < 0.8 && defaultScale < 0.8)) && (width > variables.curWidW || height > variables.curWidH)
source: "qrc:/res/res/kyview_logo.png"
source: parent.parent.parent.imageUrl
//--real0 degree
rotation: 0
property real rotateTo: 0
onRotateToChanged: {
if (isMoiveRunning()) {
return
}
rotation = rotateTo
}
onRotationChanged: {
if (isMoiveRunning()) {
return
}
if(!rotani.running) {
rotateTo = rotation
}
@ -106,26 +111,26 @@ Item {
property real curScale: 1
scale: curScale
Behavior on x {
PropertyAnimation {
id: xani
duration: startAni ? variables.imageAniDuration : 0
duration: variables.startAni ? variables.imageAniDuration : 0
easing.type: Easing.OutCubic
}
}
Behavior on y {
PropertyAnimation {
id: yani
duration: startAni ? variables.imageAniDuration : 0
duration: variables.startAni ? variables.imageAniDuration : 0
easing.type: Easing.OutCubic
}
}
Behavior on rotation {
PropertyAnimation {
id: rotani
duration: startAni ? variables.imageAniDuration : 0
duration: variables.startAni ? variables.imageAniDuration : 0
onRunningChanged: {
if (!rotani.running) {
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
@ -137,27 +142,33 @@ Item {
Behavior on scale {
PropertyAnimation {
id: scaleani
duration: startAni ? variables.imageAniDuration : 0
duration: variables.startAni ? variables.imageAniDuration : 0
onRunningChanged: {
if (!scaleani.running) {
aniStop = true
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
} else {
aniStop = false
}
}
easing.type: Easing.OutCubic
}
}
onXChanged: {
if (isMoiveRunning()) {
return
}
setDrogLimit()
}
onYChanged: {
if (isMoiveRunning()) {
return
}
setDrogLimit()
}
function changeScale(scaleValue) {
if (isMoiveRunning()) {
return
}
imageBase.setImageScaleWithImageUpdate(theImage,scaleValue)
}
@ -167,12 +178,22 @@ Item {
//
function imagePostionReset() {
if (isMoiveRunning()) {
return
}
imageBase.resetImagePostion(theImage)
}
onStatusChanged: {
if (isMoiveRunning()) {
return
}
if (theImage.status == Image.Ready) {
if (newImageLoaded) {
theImage.imagePostionReset()
//tiff
if (variables.currentType == "multiTiff") {
variables.startAni = true
}
}
}
}
@ -180,23 +201,38 @@ Item {
Connections {
target: variables
onPainterTypeChanged: {
if (isMoiveRunning()) {
return
}
if (variables.painterType == -1) {
return;
}
theImage.paintCanvas()
}
onPainterReleaseChanged:{
if (isMoiveRunning()) {
return
}
theImage.paintCanvas()
}
onCoreNeedPaintChanged: {
if (isMoiveRunning()) {
return
}
theImage.paintCanvas()
}
onNeedExitPaintChanged: {
if (isMoiveRunning()) {
return
}
exitSign()
variables.signMouseStart = false
}
onOperateImageWayChanged: {
if (isMoiveRunning()) {
return
}
if (variables.operateImageWay == 0) {
//
pincharea.enabled = true
@ -204,13 +240,27 @@ Item {
needWheelReact = true
}
if (variables.operateImageWay == 15 || variables.operateImageWay == 9 || variables.operateImageWay == 10) {
if (variables.operateImageWay == 15) {
variables.signMouseStart = true
}
mousearea.enabled = true
} /*else {
area.enabled = false
}*/
}
//story 19807
onNeedRestoreOrigChanged: {
if (isMoiveRunning()) {
return
}
imageBase.imageRestore(theImage)
}
//story 19807
}
function createTextObj(mx,my) {
if (isMoiveRunning()) {
return
}
if (variables.painterType === 6) {
var component61 = Qt.createComponent("qrc:/signcanvas/TextEditPage.qml");
if (component61.status === Component.Ready) {
@ -239,6 +289,9 @@ Item {
}
function paintCanvas() {
if (isMoiveRunning()) {
return
}
if (variables.painterType == -1) {
mousearea.enabled = true
@ -330,48 +383,36 @@ Item {
}
}
function changeImage(imageUrl,imageWidth,imageHeight) {
realWidth = imageWidth
realHeight = imageHeight
if (realWidth <= variables.curWidW && realHeight <= variables.curWidH) {
imageLeftUpX = variables.curWidW / 2 - realWidth / 2
imageLeftUpY = variables.curWidH / 2 - realHeight / 2
backX = imageRealLeftX
backY = imageRealLeftY
function changeImage(imageUrl,imageWidth,imageHeight,tiffType,page,hasRotation) {
if (isMoiveRunning()) {
return
}
if (variables.operateImageWay === 12) {
theImage.source = ""
startAni = false
theImage.x = variables.curWidW / 2 - imageWidth / 2
theImage.y = variables.curWidH / 2 - imageHeight / 2
theImage.source = imageUrl
startAni = true
if (imageUrl === "") {
return
}
if (variables.operateImageWay === 17) {
theImage.source = ""
startAni = false
theImage.x = variables.curWidW / 2 - imageWidth / 2 + imageWidth + 10
theImage.y = variables.curWidH / 2 - imageHeight / 2
theImage.source = imageUrl
startAni = true
theImage.x = variables.curWidW / 2 - imageWidth / 2
}
if (variables.operateImageWay === 18) {
theImage.source = ""
startAni = false
theImage.x = - imageWidth - 10
theImage.y = variables.curWidH / 2 - imageHeight / 2
theImage.source = imageUrl
startAni = true
theImage.x = variables.curWidW / 2 - imageWidth / 2
variables.startAni = false
if (variables.operateImageWay === 12 || variables.operateImageWay === 17 || variables.operateImageWay === 18) {
if (variables.currentType === "multiTiff") {
theImage.source = ""
newImageLoaded = true
if (variables.imageHasChanged && page) {
theImage.rotateTo = 0
theImage.mirror = false
}
theImage.source = imageUrl
theImage.imagePostionReset()
}
}
variables.startAni = true
}
}
Connections {
target: variables
onWheelChangeChanged: {
if (isMoiveRunning()) {
return
}
buriedPoint()
}
}
@ -386,13 +427,19 @@ Item {
property real initialScale
onPinchStarted: {
if (isMoiveRunning()) {
return
}
initialScale = theImage.curScale
buriedPoint()
}
onPinchUpdated: {
if (isMoiveRunning()) {
return
}
//
startAni = false
variables.startAni = false
variables.recordCurrentImageHasOperate = true
if (!imageNeedCenterZoom) {
imageBase.performZoom(theImage,theImage.mapFromItem(pincharea,pinch.center.x, pinch.center.y), undefined, false, false, true, (initialScale*pinch.scale)/theImage.curScale)
} else {
@ -402,7 +449,8 @@ Item {
theImage.imagePostionReset()
}
//
startAni = true
variables.startAni = true
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
MouseArea {
@ -413,23 +461,43 @@ Item {
hoverEnabled: false // false
propagateComposedEvents:true //穿
onPressAndHold: {
variables.mousePos = mousearea.mapToItem(bgimage, Qt.point(mouse.x, mouse.y))
}
onReleased: {
theImage.curX = theImage.x
theImage.curY = theImage.y
theImage.x = Qt.binding(function() { return theImage.curX })
theImage.y = Qt.binding(function() { return theImage.curY })
if (isMoiveRunning()) {
return
}
if (variables.doubleRestore) {
variables.doubleRestore = false
return
} else {
theImage.curX = theImage.x
theImage.curY = theImage.y
theImage.x = Qt.binding(function() { return theImage.curX })
theImage.y = Qt.binding(function() { return theImage.curY })
}
imageBase.controlImageInWid(theImage)
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
if (variables.imageIsDrag) {
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
variables.imageIsDrag = false
}
}
onPositionChanged: {
if (isMoiveRunning()) {
return
}
variables.imageIsDrag = true
variables.recordCurrentImageHasOperate = true
setDrogLimit()
imageBase.imageActuralLeftUpPos(theImage,theImage.x ,theImage.y)
imageBase.makeSureNavigatorNeedShow(theImage)
if (!variables.historyScale) {
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
}
Connections {
target: variables
onMousePosChanged: {
@ -456,6 +524,9 @@ Item {
if (needWheelReact == false) {
return
}
variables.recordCurrentImageHasOperate = true
if (wheelDelta != undefined && !imageNeedCenterZoom) {
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, true, false, false)
} else {
@ -464,8 +535,11 @@ Item {
theImage.realCurY = mainWindow.height/2 - theImage.height*theImage.scale/2
theImage.imagePostionReset()
}
variables.operateImageWay = 1
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
onZoomOut: {
@ -476,6 +550,7 @@ Item {
if (needWheelReact == false) {
return
}
variables.recordCurrentImageHasOperate = true
if (wheelDelta != undefined && !imageNeedCenterZoom) {
imageBase.performZoom(theImage,theImage.mapFromItem(bgimage, variables.mousePos.x, variables.mousePos.y), undefined, false, false, false)
} else {
@ -484,8 +559,10 @@ Item {
theImage.realCurY = mainWindow.height/2 - theImage.height*theImage.scale/2
theImage.imagePostionReset()
}
variables.operateImageWay = 2
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
onRotate: {
if (isMoiveRunning()) {
@ -501,11 +578,11 @@ Item {
}
var old = theImage.mirror
theImage.mirror = !old
startAni = false
variables.startAni = false
if (theImage.rotateTo / variables.angle90 % 2 != 0) {
theImage.rotateTo += variables.angle180
}
startAni = true
variables.startAni = true
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
}
onMirrorV: {
@ -514,18 +591,64 @@ Item {
}
var old = theImage.mirror
theImage.mirror = !old
startAni = false
variables.startAni = false
if (theImage.rotateTo / variables.angle90 % 2 == 0) {
theImage.rotateTo += variables.angle180
}
startAni = true
variables.startAni = true
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
}
}
Connections {
target: variables
onOperateImageWayChanged: {
if (isMoiveRunning()) {
return
}
if (variables.operateImageWay === 3) {
// mouseareaEnabeled = false
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
//
container.rotate(-variables.angle90)
theImage.imagePostionReset()
} else if (variables.operateImageWay === 4) {
// mouseareaEnabeled = false
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
//
container.rotate(variables.angle90)
theImage.imagePostionReset()
} else if (variables.operateImageWay === 5) {
// mouseareaEnabeled = false
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
//
container.mirrorH()
theImage.imagePostionReset()
} else if (variables.operateImageWay === 6) {
// mouseareaEnabeled = false
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
//
container.mirrorV()
theImage.imagePostionReset()
}
}
}
function operateImage(operateWay) {
if (container.imageType === 1) {
if (isMoiveRunning()) {
return
}
variables.operateImageWay = operateWay
@ -535,7 +658,7 @@ Item {
} else if (operateWay === 2) {
//
container.zoomOut(undefined)
} else if (operateWay === 3) {
}/* else if (operateWay === 3) {
//
container.rotate(-variables.angle90)
theImage.imagePostionReset()
@ -551,7 +674,7 @@ Item {
//
container.mirrorV()
theImage.imagePostionReset()
}
}*/
//ocr
if (operateWay === 9 || operateWay === 10) {
//
@ -566,12 +689,26 @@ Item {
}
//
if (operateWay === 12 || operateWay === 17 || operateWay === 18) {
startAni = false
theImage.rotateTo = 0
startAni = true
theImage.mirror = false
newImageLoaded = true
theImage.imagePostionReset()
variables.recordCurrentImageHasOperate = false
variables.historyScale = 0
variables.historyX = 0
variables.historyY = 0
if (variables.currentType == "normal") {
variables.startAni = false
newImageLoaded = true
theImage.imagePostionReset()
variables.startAni = true
} else {
variables.startAni = false
newImageLoaded = true
if (variables.imageHasChanged) {
if (!theImage.rotateTo || !theImage.mirror) {
theImage.rotateTo = 0
theImage.mirror = false
}
}
theImage.imagePostionReset()
}
} else {
newImageLoaded = false
}
@ -583,11 +720,11 @@ Item {
}
//
function isMoiveRunning() {
if (container.imageType === 1) {
return true
} else {
var currentImagePath = "image://main/" + variables.currentPath
if ((currentImagePath === theImage.source.toString() || variables.currentType == "multiTiff") && theImage.index == variables.currentImageIndex) {
return false
} else {
return true
}
}
//XY
@ -619,11 +756,16 @@ Item {
}
function operateNavigatorChangeImagePos(leftUpPoint) {
if (isMoiveRunning()) {
return
}
imageBase.operateNavigatorChangeImagePos(leftUpPoint,theImage)
}
function setDrogLimit() {
if (isMoiveRunning()) {
return
}
if(Math.abs(theImage.rotateTo % variables.angle360) == variables.angle90 || Math.abs(theImage.rotateTo % variables.angle360) == variables.angle270) {
if (theImage.width * theImage.scale >= variables.curWidH) {
if (theImage.height * theImage.scale >= variables.curWidW) {
@ -664,21 +806,40 @@ Item {
}
}
if(!variables.navigatorState) {
mousearea.drag.axis= Drag.None
mousearea.enabled = false
} else {
mousearea.enabled = true
}
}
function adjustImagePostion() {
function adjustImagePostion(needRecord) {
if (isMoiveRunning()) {
return
}
setDrogLimit()
imageBase.controlImageInWid(theImage)
if (needRecord) {
variables.recordCurrentImageHasOperate = true
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
}
function updatePosAccordingToWidSizeChange() {
function updatePosAccordingToWidSizeChange(needRecord) {
if (isMoiveRunning()) {
return
}
imageBase.imageActuralLeftUpPos(theImage,theImage.curX,theImage.curY)
imageBase.makeSureNavigatorNeedShow(theImage)
if (needRecord) {
variables.recordCurrentImageHasOperate = true
imageBase.recordCUrrentPOsAndScaleInfo(theImage)
}
}
function undoSignOperate() {
if (isMoiveRunning()) {
return
}
if (variables.objList.length == 0) {
variables.coreNeedPaint = !variables.coreNeedPaint
return
@ -703,6 +864,9 @@ Item {
}
function exitSign() {
if (isMoiveRunning()) {
return
}
if (variables.objList.length == 0) {
return
}

View File

@ -35,6 +35,7 @@ Item {
anchors.rightMargin: 0
property int imageType: 0 //qml
property int itemIndex: 0
signal zoomIn(var wheelDelta)
signal zoomOut(var wheelDelta)
@ -45,7 +46,25 @@ Item {
signal mirrorH()
signal mirrorV()
signal mirrorReset()
property string imageUrl:imageType == 0? "qrc:/res/res/kyview_logo.png" : "qrc:/res/res/loadgif.gif"
MouseArea {
id: transMouse
anchors.fill: parent
propagateComposedEvents:true
onPositionChanged: {
mouse.accepted = false
}
onDoubleClicked: {
mouse.accepted = false
}
onClicked: {
mouse.accepted = false
}
onReleased: {
mouse.accepted = false
}
}
Loader {
id: imageloader
@ -54,8 +73,6 @@ Item {
source: imageType == 0 ? "ImageNormal.qml" : "ImageAnimated.qml"
}
function resetImagePostion(theImage) {
}
}

View File

@ -19,6 +19,7 @@ Item {
property int operateImageWay:12
property bool wheelChange: false
property var signPaintList: []
property string format: ""
property int painterType : -1 //
property int painterThickness : 12 //
@ -58,6 +59,51 @@ Item {
property double textMouseX: -1000
property double textMouseY: -1000
// "jpg", "jpe", "jpeg", "pbm", "pgm", "ppm", "sr", "ras", "png", "tga", "svg", "gif", "apng", "ico", "xpm", "exr", "psd", "jfi", "jif", "j2k", "jp2", "jng", "wbmp", "xbm", "tiff", "tif", "webp", "pnm", "bmp", "dib"
//story 19807
//xy
property double historyScale: 0
property double historyX: 0
property double historyY: 0
//xy
property double origScale: 1
property double origX: 0
property double origY: 0
//pathpath
property string historyPath: ""
property string currentPath: ""
//
property bool needRestoreOrig: true //
property bool restoreOrigToToolbar: true // //c++使
property bool doubleRestore: false //
property bool controlImageDoubleScale: false //2
property bool recordCurrentImageHasOperate: false //
property point histortPos: Qt.point(-1,-1) //
property point wheelVaule: Qt.point(-1,-1) //-
property bool restoreToHistory: false//
property bool imageIsDrag: false //
property bool startAni: true //
//story 19807
property int currentShowIndex: 0
property string imageDefault: "qrc:/res/res/kyview_logo.png"
// property var imagelist: ["file:///home/zou//5.png"]
//"jpg", "jpe", "jpeg", "pbm", "pgm", "ppm", "sr", "ras", "png", "tga", "svg", "gif", "apng", "ico", "xpm", "exr", "psd", "jfi", "jif", "j2k", "jp2", "jng", "wbmp", "xbm", "tiff", "tif", "webp", "pnm", "bmp", "dib"
property var loadImageList:[]; //
property int imageTotalNum:0; //
property int currentImageIndex:-1; //
property string imageDelPath:""; //
property var showImageIndex:[]; //5itemindexloadImageList
property var imageTypeMovieOrNormal:[]; //
property var imagelist: [] //list
property int addImageNum: 0//
property var loadedImageList:[]//
property bool signMouseStart: false
property string currentType: "normal"
property var imageListEveryAddType: []
property bool updateSuorce: false
property var hasnotFinishedLoad: []
property var imageHasChanged: false//
}

131
res.qrc
View File

@ -18,28 +18,6 @@
<file>res/cancel_hover.png</file>
<file>res/save_hover.png</file>
<file>res/save.png</file>
<file>res/sp1damaged/1adaptWid_damaged.png</file>
<file>res/sp1damaged/1cutImage_damaged.png</file>
<file>res/sp1damaged/1delImage_damaged.png</file>
<file>res/sp1damaged/1enlarge_damaged.png</file>
<file>res/sp1damaged/1filter_damaged.png</file>
<file>res/sp1damaged/1flipH_damaged.png</file>
<file>res/sp1damaged/1flipV_damaged.png</file>
<file>res/sp1damaged/1origSize_damaged.png</file>
<file>res/sp1damaged/1reduce_damaged.png</file>
<file>res/sp1damaged/1rotate_damaged.png</file>
<file>res/sp1damaged/1sign_damaged.png</file>
<file>res/sp1damaged/adaptWid_damaged.png</file>
<file>res/sp1damaged/cutImage_damaged.png</file>
<file>res/sp1damaged/delImage_damaged.png</file>
<file>res/sp1damaged/enlarge_damaged.png</file>
<file>res/sp1damaged/filter_damaged.png</file>
<file>res/sp1damaged/flipH_damaged.png</file>
<file>res/sp1damaged/flipV_damaged.png</file>
<file>res/sp1damaged/origSize_damaged.png</file>
<file>res/sp1damaged/reduce_damaged.png</file>
<file>res/sp1damaged/rotate_damaged.png</file>
<file>res/sp1damaged/sign_damaged.png</file>
<file>res/inteldamaged/1adaptWid_damaged.png</file>
<file>res/inteldamaged/1cutImage_damaged.png</file>
<file>res/inteldamaged/1delImage_damaged.png</file>
@ -120,66 +98,8 @@
<file>res/intel/rotate.png</file>
<file>res/intel/sidebar_hover.png</file>
<file>res/intel/sidebar.png</file>
<file>res/sp1/1adaptiveWidget_hover.png</file>
<file>res/sp1/1adaptiveWidget.png</file>
<file>res/sp1/1cutImage_hover.png</file>
<file>res/sp1/1cutImage.png</file>
<file>res/sp1/1delImage_hover.png</file>
<file>res/sp1/1delImage.png</file>
<file>res/sp1/1enlarge_hover.png</file>
<file>res/sp1/1enlarge.png</file>
<file>res/sp1/1filter_hover.png</file>
<file>res/sp1/1filter.png</file>
<file>res/sp1/1flipH_hover.png</file>
<file>res/sp1/1flipH.png</file>
<file>res/sp1/1flipV_hover.png</file>
<file>res/sp1/1flipV.png</file>
<file>res/sp1/1information_hover.png</file>
<file>res/sp1/1information.png</file>
<file>res/sp1/1labelbar_hover.png</file>
<file>res/sp1/1labelbar.png</file>
<file>res/sp1/1originalSize_hover.png</file>
<file>res/sp1/1originalSize.png</file>
<file>res/sp1/1reduce_hover.png</file>
<file>res/sp1/1reduce.png</file>
<file>res/sp1/1rotate_hover.png</file>
<file>res/sp1/1rotate.png</file>
<file>res/sp1/1sidebar_hover.png</file>
<file>res/sp1/1sidebar.png</file>
<file>res/sp1/adaptiveWidget_hover.png</file>
<file>res/sp1/adaptiveWidget.png</file>
<file>res/sp1/cutImage_hover.png</file>
<file>res/sp1/cutImage.png</file>
<file>res/sp1/delImage_hover.png</file>
<file>res/sp1/delImage.png</file>
<file>res/sp1/enlarge_hover.png</file>
<file>res/sp1/enlarge.png</file>
<file>res/sp1/filter_hover.png</file>
<file>res/sp1/filter.png</file>
<file>res/sp1/flipH_hover.png</file>
<file>res/sp1/flipH.png</file>
<file>res/sp1/flipV_hover.png</file>
<file>res/sp1/flipV.png</file>
<file>res/sp1/information_hover.png</file>
<file>res/sp1/information.png</file>
<file>res/sp1/labelbar_hover.png</file>
<file>res/sp1/labelbar.png</file>
<file>res/sp1/originalSize_hover.png</file>
<file>res/sp1/originalSize.png</file>
<file>res/sp1/reduce_hover.png</file>
<file>res/sp1/reduce.png</file>
<file>res/sp1/rotate_hover.png</file>
<file>res/sp1/rotate.png</file>
<file>res/sp1/sidebar_hover.png</file>
<file>res/sp1/sidebar.png</file>
<file>res/sp1/1ocr.png</file>
<file>res/sp1/1ocr_hover.png</file>
<file>res/sp1/ocr.png</file>
<file>res/sp1/ocr_hover.png</file>
<file>res/damaged_imgB.png</file>
<file>res/damaged_img.png</file>
<file>res/sp1damaged/ocr_damaged.png</file>
<file>res/sp1damaged/1ocr_damaged.png</file>
<file>res/ocrCancel_W.png</file>
<file>res/ocrCancel_B.png</file>
<file>res/mark/undo.png</file>
@ -229,6 +149,56 @@
<file>res/left.svg</file>
<file>res/1right.svg</file>
<file>res/1left.svg</file>
<file>res/tiff/left_click_D.png</file>
<file>res/tiff/left_click_W.png</file>
<file>res/tiff/left_hover_D.png</file>
<file>res/tiff/left_hover_W.png</file>
<file>res/tiff/left_normal_D.png</file>
<file>res/tiff/left_normal_W.png</file>
<file>res/tiff/right_click_D.png</file>
<file>res/tiff/right_click_W.png</file>
<file>res/tiff/right_hover_D.png</file>
<file>res/tiff/right_hover_W.png</file>
<file>res/tiff/right_normal_D.png</file>
<file>res/tiff/right_normal_W.png</file>
<file>res/tiff/tiffTool_D.png</file>
<file>res/tiff/tiffTool_W.png</file>
<file>res/addalbum_black.png</file>
<file>res/addalbum_white1.png</file>
<file>res/addplus.svg</file>
<file>res/cancel_hover.svg</file>
<file>res/cancel.svg</file>
<file>res/dark-window-close.svg</file>
<file>res/little_add.svg</file>
<file>res/save_hover.svg</file>
<file>res/save.svg</file>
<file>res/sp1/adaptiveWidget.svg</file>
<file>res/sp1/cutImage.svg</file>
<file>res/sp1/delImage.svg</file>
<file>res/sp1/enlarge.svg</file>
<file>res/sp1/filter.svg</file>
<file>res/sp1/flipH.svg</file>
<file>res/sp1/flipV.svg</file>
<file>res/sp1/information.svg</file>
<file>res/sp1/labelbar.svg</file>
<file>res/sp1/ocr.svg</file>
<file>res/sp1/originalSize.svg</file>
<file>res/sp1/reduce.svg</file>
<file>res/sp1/rotate.svg</file>
<file>res/sp1/sidebar.svg</file>
<file>res/mark/arrow.svg</file>
<file>res/mark/blur.svg</file>
<file>res/mark/bold.svg</file>
<file>res/mark/deleteLine.svg</file>
<file>res/mark/ellipse.svg</file>
<file>res/mark/italics.svg</file>
<file>res/mark/markArticle.svg</file>
<file>res/mark/menuBtn.svg</file>
<file>res/mark/rectangle.svg</file>
<file>res/mark/segment.svg</file>
<file>res/mark/text.svg</file>
<file>res/mark/underLine.svg</file>
<file>res/mark/undo.svg</file>
</qresource>
<qresource prefix="/">
<file>showImageComponent.qml</file>
@ -248,5 +218,6 @@
<file>signcanvas/FuzzyPage.qml</file>
<file>signcanvas/CirclePage.qml</file>
<file>signcanvas/SignBase.qml</file>
<file>CoverFlow.qml</file>
</qresource>
</RCC>

10
res/addplus.svg Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="39px" height="39px" viewBox="0 0 39 39" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>icon/ add plus</title>
<g id="icon/-add-plus" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.796039">
<g fill="#000000">
<path d="M1.5,18 L37.5,18 C38.3284271,18 39,18.6715729 39,19.5 C39,20.3284271 38.3284271,21 37.5,21 L1.5,21 C0.671572875,21 1.01453063e-16,20.3284271 0,19.5 C-1.01453063e-16,18.6715729 0.671572875,18 1.5,18 Z" id="矩形备份-2"></path>
<path d="M1.5,18 L37.5,18 C38.3284271,18 39,18.6715729 39,19.5 C39,20.3284271 38.3284271,21 37.5,21 L1.5,21 C0.671572875,21 1.01453063e-16,20.3284271 0,19.5 C-1.01453063e-16,18.6715729 0.671572875,18 1.5,18 Z" id="矩形备份-3" transform="translate(19.500000, 19.500000) rotate(90.000000) translate(-19.500000, -19.500000) "></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 980 B

13
res/cancel.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="看图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-opacity="0.780075393">
<g id="18、裁剪操作" transform="translate(-926.000000, -862.000000)" stroke="#FF2626" stroke-width="2">
<g id="裁剪操作栏" transform="translate(906.000000, 854.000000)">
<g id="icon取消" transform="translate(20.000000, 8.000000)">
<path d="M4.69565217,19.3043478 L19.3043478,4.69565217 M4.69565217,4.69565217 L19.3043478,19.3043478" id="关闭"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 832 B

13
res/cancel_hover.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="看图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-opacity="0.780075393">
<g id="18、裁剪操作" transform="translate(-927.000000, -925.000000)" stroke="#D30000" stroke-width="2">
<g id="裁剪操作栏" transform="translate(907.000000, 917.000000)">
<g id="icon取消-hover" transform="translate(20.000000, 8.000000)">
<path d="M4.69565217,19.3043478 L19.3043478,4.69565217 M4.69565217,4.69565217 L19.3043478,19.3043478" id="关闭"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 838 B

23
res/little_add.svg Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>add 深</title>
<defs>
<filter id="filter-1">
<feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"></feColorMatrix>
</filter>
</defs>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.54" stroke-linecap="round">
<g id="23、工具栏-信息-深" transform="translate(-467.000000, -287.000000)">
<g id="侧栏" transform="translate(420.000000, 259.000000)">
<g id="图片" transform="translate(8.000000, 8.000000)">
<g id="icon/-add-medium" transform="translate(39.000000, 20.000000)" filter="url(#filter-1)">
<g transform="translate(0.500000, 1.000000)">
<line x1="7.5" y1="2.84511997e-14" x2="7.5" y2="14" id="直线" stroke="#000000" stroke-width="2"></line>
<line x1="7.5" y1="2.84511997e-14" x2="7.5" y2="14" id="直线备份" stroke="#000000" stroke-width="2" transform="translate(7.500000, 7.000000) rotate(-90.000000) translate(-7.500000, -7.000000) "></line>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

19
res/mark/arrow.svg Normal file
View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.778064546" stroke-linecap="round">
<g id="16、截图-状态一览" transform="translate(-1299.000000, -776.000000)" stroke="#040404" stroke-width="2">
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
<g id="箭头" transform="translate(251.000000, 10.000000)">
<g id="编组-2" transform="translate(5.000000, 5.000000)">
<g id="编组">
<line x1="0.5" y1="0.5" x2="6.5" y2="0.5" id="直线-7"></line>
<line x1="0.5" y1="0.5" x2="0.5" y2="6.5" id="直线-8"></line>
</g>
<line x1="1" y1="1" x2="13.7279221" y2="13.7279221" id="直线"></line>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

13
res/mark/blur.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.2 KiB

19
res/mark/bold.svg Normal file
View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="16、截图-状态一览" transform="translate(-1172.000000, -298.000000)" fill="#333333" fill-rule="nonzero">
<g id="字体副操作栏" transform="translate(1048.000000, 246.001984)">
<g id="字体区" transform="translate(10.000000, 16.998016)">
<g id="类型" transform="translate(0.000000, 32.000000)">
<g id="加粗" transform="translate(98.000000, 0.000000)">
<g id="icon/-12/-加粗" transform="translate(16.000000, 3.000000)">
<path d="M10.4666659,7.51399943 C10.96998,6.91468338 11.2473849,6.157953 11.2506658,5.37533298 C11.2506658,3.51118805 9.73947777,2 7.87533284,2 L3,2 L3,14 L8.43799944,14 C9.99556154,14.0012961 11.3730528,12.9897273 11.8380089,11.5031819 C12.3029649,10.0166365 11.7473744,8.40044571 10.4666659,7.51399943 L10.4666659,7.51399943 Z M5,4 L8,4 C8.53589803,4 9.03108851,4.28589834 9.29903769,4.74999991 C9.56698686,5.21410148 9.56698686,5.7858982 9.29903769,6.24999978 C9.03108851,6.71410135 8.53589803,7 8,7 L5,7 L5,4 L5,4 Z M8.39300451,12 L5,12 L5,9 L8.39300451,9 C9.28052361,9 10,9.67157288 10,10.5 C10,11.3284271 9.28052361,12 8.39300451,12 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

17
res/mark/deleteLine.svg Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="16、截图-状态一览" transform="translate(-1074.000000, -298.000000)" fill="#333333">
<g id="字体副操作栏" transform="translate(1048.000000, 246.001984)">
<g id="字体区" transform="translate(10.000000, 16.998016)">
<g id="类型" transform="translate(0.000000, 32.000000)">
<g id="icon/-12/-删除线" transform="translate(16.000000, 3.000000)">
<path d="M9,10 L9,14 L7,14 L7,10 L9,10 Z M13.5,8 C13.7761424,8 14,8.22385763 14,8.5 C14,8.77614237 13.7761424,9 13.5,9 L2.5,9 C2.22385763,9 2,8.77614237 2,8.5 C2,8.22385763 2.22385763,8 2.5,8 L13.5,8 Z M13,2 L13,4 L9,4 L9,7 L7,7 L7,4 L3,4 L3,2 L13,2 Z" id="形状结合"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

13
res/mark/ellipse.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-opacity="0.78">
<g id="16、截图-状态一览" transform="translate(-1211.000000, -776.000000)" stroke="#000000" stroke-width="2">
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
<g id="椭圆形" transform="translate(163.000000, 10.000000)">
<circle cx="12" cy="12" r="8"></circle>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 723 B

19
res/mark/italics.svg Normal file
View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="16、截图-状态一览" transform="translate(-1220.000000, -298.000000)" fill="#333333" fill-rule="nonzero">
<g id="字体副操作栏" transform="translate(1048.000000, 246.001984)">
<g id="字体区" transform="translate(10.000000, 16.998016)">
<g id="类型" transform="translate(0.000000, 32.000000)">
<g id="斜体" transform="translate(147.000000, 0.000000)">
<g id="icon/-12/-斜体" transform="translate(15.000000, 3.000000)">
<polygon id="路径" points="13 2 13 2.8573913 11.3329106 2.8573913 7.1677234 13.1426087 8.83312199 13.1426087 8.83312199 14 3 14 3 13.1426087 4.66624398 13.1426087 8.83312199 2.8573913 7.16687801 2.8573913 7.16687801 2"></polygon>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

13
res/mark/markArticle.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.74">
<g id="16、截图-状态一览" transform="translate(-1387.000000, -776.000000)" fill="#000000" fill-rule="nonzero">
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
<g id="mark条" transform="translate(339.000000, 10.000000)">
<polygon transform="translate(12.000000, 12.000000) scale(-1, 1) translate(-12.000000, -12.000000) " points="18 3 18 21 11.999957 14.5715127 6 21 6 3"></polygon>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 842 B

13
res/mark/menuBtn.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="13px" height="7px" viewBox="0 0 13 7" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>下拉</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="16、截图-状态一览" transform="translate(-1629.000000, -467.000000)" fill="#000000" fill-rule="nonzero">
<g id="操作栏备份-7" transform="translate(1048.000000, 447.000000)">
<g id="选项" transform="translate(544.000000, 9.000000)">
<path d="M49.7938303,11.3709507 C50.0014236,11.6370634 50.0188436,11.9706418 49.8327005,12.1159808 L43.7615179,16.8516541 C43.7195328,16.8845602 43.5846163,16.965578 43.561675,16.9910437 C43.3354806,17.2410798 43.0102432,17.3161335 42.8348178,17.1578181 L37.1170399,12.0017616 C36.9416145,11.8432986 36.9821234,11.5118165 37.2083326,11.2612046 C37.4345417,11.0107256 37.7597644,10.9359524 37.9357803,11.0942678 L43.1395203,15.7866125 L49.0806729,11.1521819 C49.2674065,11.006843 49.5866946,11.1049855 49.7938303,11.3709507 L49.7938303,11.3709507 Z" id="下拉"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

13
res/mark/rectangle.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-opacity="0.78">
<g id="16、截图-状态一览" transform="translate(-1167.000000, -776.000000)" stroke="#000000" stroke-width="2">
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
<g id="矩形" transform="translate(119.000000, 10.000000)">
<rect x="4" y="4" width="16" height="16" rx="2"></rect>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 736 B

13
res/mark/segment.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-opacity="0.780075393">
<g id="16、截图-状态一览" transform="translate(-1255.000000, -776.000000)" stroke="#040404" stroke-width="2">
<g id="编组-2" transform="translate(1048.000000, 766.000000)">
<g id="线段" transform="translate(207.000000, 10.000000)">
<line x1="11.3760823" y1="2.72442281" x2="12.6239177" y2="21.2755772" id="直线-5" transform="translate(12.000000, 12.000000) rotate(-135.000000) translate(-12.000000, -12.000000) "></line>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 901 B

13
res/mark/text.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0.78">
<g id="16、截图-状态一览" transform="translate(-1431.000000, -551.000000)" fill="#000000">
<g id="操作栏备份-8" transform="translate(1048.000000, 541.000000)">
<g id="文字" transform="translate(383.000000, 10.000000)">
<path d="M4,6 L4,4 L20,4 L20,6 L13,6 L13,20 L11,20 L11,6 L4,6 Z" id="形状结合"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 759 B

22
res/mark/underLine.svg Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="16、截图-状态一览" transform="translate(-1123.000000, -298.000000)" stroke="#333333">
<g id="字体副操作栏" transform="translate(1048.000000, 246.001984)">
<g id="字体区" transform="translate(10.000000, 16.998016)">
<g id="类型" transform="translate(0.000000, 32.000000)">
<g id="下划线" transform="translate(49.000000, 0.000000)">
<g id="icon/-12/-下划线" transform="translate(16.000000, 3.000000)">
<g id="下划线" transform="translate(3.000000, 2.000000)">
<path d="M8,0 L8,6 C8,7.65685425 6.65685425,9 5,9 C3.34314575,9 2,7.65685425 2,6 L2,0 L2,0" id="矩形" stroke-width="2"></path>
<rect id="矩形" x="0.5" y="11.5" width="9" height="1" rx="0.5"></rect>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

16
res/mark/undo.svg Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="截图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.76">
<g id="16、截图-状态一览" transform="translate(-1548.000000, -551.000000)" stroke="#000000">
<g id="操作栏备份-8" transform="translate(1048.000000, 541.000000)">
<g id="撤销" transform="translate(500.000000, 10.000000)">
<g id="编组" transform="translate(3.000000, 3.000000)">
<path d="M2.20577137,13.7477877 C4.55258969,17.8125963 9.75024026,19.2053025 13.8150488,16.8584842 C17.8798574,14.5116659 19.2725637,9.31401533 16.9257454,5.24920675 C15.1557768,2.1835313 11.764208,0.637791621 8.46003874,1.06991288 C7.38317821,1.21074536 6.31560101,1.56166045 5.31646789,2.13851023 C4.01394409,2.89052269 2.98579509,3.93526217 2.26714239,5.14165346" id="椭圆形" stroke-width="2" stroke-linecap="round"></path>
<path d="M0.646446609,0.646446609 C1.13807119,0.5 1.26307119,0.555964406 1.35355339,0.646446609 C1.44403559,0.736928813 1.5,0.861928813 1.5,1 L1.5,1 L1.5,5.5 L6,5.5 C6.13807119,5.5 6.26307119,5.55596441 6.35355339,5.64644661 C6.44403559,5.73692881 6.5,5.86192881 6.5,6 C6.5,6.13807119 6.44403559,6.26307119 6.35355339,6.35355339 C6.26307119,6.44403559 6.13807119,6.5 6,6.5 L6,6.5 L1,6.5 C0.861928813,6.5 0.736928813,6.44403559 0.646446609,6.35355339 C0.555964406,6.26307119 0.5,6.13807119 0.5,6 L0.5,6 L0.5,1 C0.5,0.861928813 0.555964406,0.736928813 0.646446609,0.646446609 Z" id="形状结合"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

13
res/save.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="看图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
<g id="18、裁剪操作" transform="translate(-970.000000, -862.000000)" stroke="#22B600" stroke-width="2">
<g id="裁剪操作栏" transform="translate(906.000000, 854.000000)">
<g id="icon确定" transform="translate(64.000000, 8.000000)">
<path d="M8,19 L22,6 M2,12 L8,19" id="关闭"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 735 B

13
res/save_hover.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切片</title>
<g id="看图" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
<g id="18、裁剪操作" transform="translate(-971.000000, -925.000000)" stroke="#198700" stroke-width="2">
<g id="裁剪操作栏" transform="translate(907.000000, 917.000000)">
<g id="icon确定-hover" transform="translate(64.000000, 8.000000)">
<path d="M8,19 L22,6 M2,12 L8,19" id="关闭"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 741 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 718 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 427 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 455 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 819 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 528 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 414 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 540 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 492 B

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>适应窗口</title>
<g id="适应窗口" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.697846912">
<g id="适应窗口icon" stroke="#000000">
<g id="适应窗口" transform="translate(1.000000, 1.000000)" stroke-width="2">
<rect id="矩形" x="1" y="1" width="20" height="20" rx="4"></rect>
</g>
<g id="编组" transform="translate(6.000000, 6.000000)" stroke-width="1.2">
<polyline id="矩形" transform="translate(2.142857, 2.142857) rotate(-90.000000) translate(-2.142857, -2.142857) " points="-8.8817842e-16 -3.05613961e-14 4.28571429 -3.05613961e-14 4.28571429 4.28571429"></polyline>
<polyline id="矩形备份-2" transform="translate(2.142857, 9.857143) scale(1, -1) rotate(-90.000000) translate(-2.142857, -9.857143) " points="-1.33226763e-15 7.71428571 4.28571429 7.71428571 4.28571429 12"></polyline>
<polyline id="矩形备份" transform="translate(9.857143, 2.142857) scale(-1, 1) rotate(-90.000000) translate(-9.857143, -2.142857) " points="7.71428571 -3.00711836e-14 12 -3.00711836e-14 12 4.28571429"></polyline>
<polyline id="矩形备份-3" transform="translate(9.857143, 9.857143) scale(-1, -1) rotate(-90.000000) translate(-9.857143, -9.857143) " points="7.71428571 7.71428571 12 7.71428571 12 12"></polyline>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 B

12
res/sp1/cutImage.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>裁剪</title>
<g id="裁剪" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.701381138" stroke-linecap="round">
<g id="编组" stroke="#000000" stroke-width="2">
<g id="编组-2" transform="translate(3.000000, 3.000000)">
<path d="M0,3 L14,3 C14.5522847,3 15,3.44771525 15,4 L15,18 L15,18" id="矩形"></path>
<path d="M3,0 L17,0 C17.5522847,-1.01453063e-16 18,0.44771525 18,1 L18,15 L18,15" id="矩形备份-10" transform="translate(10.500000, 7.500000) scale(-1, -1) translate(-10.500000, -7.500000) "></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 835 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 434 B

13
res/sp1/delImage.svg Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>删除</title>
<g id="删除" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.698776972">
<g id="编组" transform="translate(1.000000, 2.000000)">
<path d="M6,3 L6,1 C6,0.44771525 6.44771525,3.87621135e-15 7,3.77475828e-15 L15,3.77475828e-15 C15.5522847,3.67330522e-15 16,0.44771525 16,1 L16,3 L16,3" id="矩形" stroke="#000000" stroke-width="2"></path>
<path d="M4,20 L4,6 C4,4.34314575 5.34314575,3 7,3 L15,3 C16.6568542,3 18,4.34314575 18,6 L18,20 L18,20" id="矩形备份" stroke="#000000" stroke-width="2" transform="translate(11.000000, 11.500000) scale(1, -1) translate(-11.000000, -11.500000) "></path>
<rect id="矩形" fill="#000000" opacity="0.849999964" x="8" y="8" width="1.5" height="8" rx="0.75"></rect>
<rect id="矩形备份-2" fill="#000000" opacity="0.849999964" x="12.5" y="8" width="1.5" height="8" rx="0.75"></rect>
<rect id="矩形" fill="#000000" x="0" y="3" width="22" height="2" rx="1"></rect>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 569 B

11
res/sp1/enlarge.svg Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>放大</title>
<g id="放大" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.695731027">
<g id="放大" stroke="#000000" transform="translate(2.000000, 2.000000)">
<circle id="椭圆形" stroke-width="1.4" cx="10" cy="10" r="9.3"></circle>
<line x1="6" y1="10" x2="14" y2="10" id="直线" stroke-width="2" stroke-linecap="round"></line>
<line x1="6" y1="10" x2="14" y2="10" id="直线备份" stroke-width="2" stroke-linecap="round" transform="translate(10.000000, 10.000000) rotate(90.000000) translate(-10.000000, -10.000000) "></line>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 835 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 729 B

11
res/sp1/filter.svg Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>滤镜</title>
<g id="滤镜" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.698776972">
<g id="编组" transform="translate(0.000000, 0.000000)" fill="#000000" fill-rule="nonzero">
<g id="滤镜icon">
<path d="M13.4778223,2.32903187 C15.0419986,2.85977397 16.2618461,3.9594872 16.9784128,5.32547616 C17.6748277,6.65304966 17.8958429,8.23211715 17.4956472,9.78440455 C17.6895606,9.83997038 17.8807261,9.90480768 18.0684045,9.97866943 C19.6022752,10.5802118 20.8329628,11.7727053 21.4861389,13.2904297 C22.0799867,14.6637054 22.1452376,16.1519817 21.7535964,17.5071026 C21.361914,18.862366 20.5132583,20.0844223 19.279447,20.9251543 C18.0454085,21.7660412 16.6007556,22.1064628 15.2017042,21.9712379 C13.8458269,21.8401859 12.5327504,21.2623852 11.495606,20.2603998 C10.6316808,21.093175 9.56710894,21.6388633 8.43868894,21.8695503 C7.266997,22.1090836 6.02645359,22.0089988 4.870158,21.5379846 C3.71400319,21.0670277 2.75468262,20.2710925 2.08035079,19.2796687 C1.40612769,18.2884047 1.01680954,17.1017159 1.00053136,15.8491127 C0.984253255,14.5965152 1.3425979,13.4000331 1.99082912,12.3914425 C2.63916257,11.382693 3.57746567,10.561896 4.72123901,10.0606922 C4.97203712,9.95140464 5.22962839,9.85869887 5.49236143,9.78293589 C5.16239219,8.51006563 5.243929,7.16340207 5.72718117,5.938433 C6.33410001,4.39655337 7.48955582,3.22888713 8.88425409,2.57932239 C10.2791783,1.92965242 11.9134444,1.79822138 13.4778223,2.32903187 Z M8.78079058,11.726202 C7.86836375,11.363664 6.8917472,11.3316823 5.99717663,11.5882207 C5.10247695,11.8447962 4.28986555,12.389963 3.70570656,13.1816557 C3.12139624,13.9735535 2.83860478,14.9132078 2.85465158,15.8476755 C2.87069823,16.7821346 3.1855784,17.7114315 3.79672506,18.4826209 C4.40771042,19.2536068 5.23854568,19.7703059 6.1415101,19.995748 C7.04435894,20.2211613 8.01929845,20.1553813 8.9185789,19.761536 C9.97380655,19.3042519 10.8026423,18.4425246 11.2210627,17.3682069 C11.6592251,16.2521528 11.6043792,15.0615814 11.162398,14.0399822 C10.7204818,13.0185331 9.89148533,12.1659155 8.78079058,11.726202 Z M16.1580474,11.4369131 C14.8406485,11.3250191 13.5407993,11.8361467 12.6403771,12.7942012 C12.7276828,12.9563083 12.8081036,13.1220026 12.8812852,13.2909698 C13.5409985,14.8044354 13.5703606,16.5203721 12.9626924,18.0560044 C12.8694752,18.2934567 12.7618694,18.5252419 12.640575,18.7498436 C13.0764264,19.2199853 13.6122165,19.5861331 14.2085732,19.8207933 C15.3197661,20.2604097 16.5053991,20.2049064 17.5227439,19.7605664 C18.5402712,19.3161468 19.3894847,18.4827584 19.8274327,17.3664599 C20.2487806,16.2930028 20.2278991,15.095396 19.7693911,14.0374322 C19.3109865,12.9797068 18.4527133,12.1482982 17.3835265,11.7264657 C17.0022018,11.5754234 16.6018039,11.4790757 16.1580474,11.4369131 Z M13.0821131,4.17311422 C11.9718374,3.73546762 10.7868012,3.7917422 9.77010921,4.23610412 C8.75355372,4.68040635 7.9052537,5.51269625 7.46796534,6.627336 C7.0956674,7.56050861 7.06206128,8.59285388 7.37011984,9.54575664 C8.91240406,9.59381191 10.3820767,10.2136656 11.4956614,11.2849176 C12.607993,10.2149125 14.0759172,9.59552879 15.6164406,9.54727238 C15.960395,8.47414099 15.8663271,7.35739829 15.4275128,6.39999389 C14.9764093,5.41577699 14.1609495,4.59992499 13.0821131,4.17311422 Z" id="形状"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 679 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 421 B

12
res/sp1/flipH.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>镜像</title>
<g id="镜像" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.700172061">
<g id="编组" fill-rule="nonzero">
<g id="镜像" transform="translate(12.000000, 12.500000) rotate(-360.000000) translate(-12.000000, -12.500000) translate(3.000000, 4.000000)">
<path d="M0.870524871,0.859223293 L6.85419413,2.70397765 C6.95800239,2.75469723 7.04409335,2.81819716 7.1053047,2.89782707 C7.15425226,2.961503 7.18448911,3.03497838 7.19697852,3.11410857 L7.19697852,3.11410857 L7.20372265,13.8264474 C7.20372265,13.926127 7.17767716,14.0199042 7.1310156,14.0996445 C7.09582524,14.1597815 7.04904493,14.2121593 6.99306343,14.2516331 L6.99306343,14.2516331 L1.08417299,16.1773928 C0.994269711,16.1708714 0.915791425,16.1493094 0.858554018,16.1007314 C0.815873838,16.0645083 0.8,16.0102255 0.8,15.9546774 L0.8,15.9546774 L0.8,1.04297361 C0.8,0.971932778 0.825427167,0.906276838 0.870524871,0.859223293 L0.870524871,0.859223293 Z" id="路径" stroke="#000000" stroke-width="1.6"></path>
<path d="M17.0025635,-1.70530257e-13 C16.9305188,-1.70530257e-13 16.8629768,0.00939615863 16.7954349,0.0211413569 L10.8967701,1.94735388 C10.9057757,1.94500484 10.9125299,1.94500484 10.9170327,1.9426558 C10.3879539,2.09534337 9.99846196,2.6003869 9.99846196,3.19939201 L9.99846196,13.8240984 C9.99846196,14.3291419 10.2731326,14.7660633 10.676133,14.984524 L16.7909321,16.9788586 C16.8562226,16.9929529 16.9282674,17 17.0003122,17 C17.5519049,17 17.9999669,16.5325411 17.9999669,15.9546774 L17.9999669,1.04297361 C18.004436,0.467458892 17.5564076,-1.70530257e-13 17.0025635,-1.70530257e-13 Z" id="路径" fill="#000000" opacity="0.900000036"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 447 B

12
res/sp1/flipV.svg Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>镜像上下</title>
<g id="镜像上下" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.700172061">
<g id="编组" fill-rule="nonzero">
<g id="镜像" transform="translate(12.500000, 12.000000) rotate(90.000000) translate(-12.500000, -12.000000) translate(3.500000, 3.500000)">
<path d="M0.870524871,0.859223293 L6.85419413,2.70397765 C6.95800239,2.75469723 7.04409335,2.81819716 7.1053047,2.89782707 C7.15425226,2.961503 7.18448911,3.03497838 7.19697852,3.11410857 L7.19697852,3.11410857 L7.20372265,13.8264474 C7.20372265,13.926127 7.17767716,14.0199042 7.1310156,14.0996445 C7.09582524,14.1597815 7.04904493,14.2121593 6.99306343,14.2516331 L6.99306343,14.2516331 L1.08417299,16.1773928 C0.994269711,16.1708714 0.915791425,16.1493094 0.858554018,16.1007314 C0.815873838,16.0645083 0.8,16.0102255 0.8,15.9546774 L0.8,15.9546774 L0.8,1.04297361 C0.8,0.971932778 0.825427167,0.906276838 0.870524871,0.859223293 L0.870524871,0.859223293 Z" id="路径" stroke="#000000" stroke-width="1.6"></path>
<path d="M17.0025635,-1.70530257e-13 C16.9305188,-1.70530257e-13 16.8629768,0.00939615863 16.7954349,0.0211413569 L10.8967701,1.94735388 C10.9057757,1.94500484 10.9125299,1.94500484 10.9170327,1.9426558 C10.3879539,2.09534337 9.99846196,2.6003869 9.99846196,3.19939201 L9.99846196,13.8240984 C9.99846196,14.3291419 10.2731326,14.7660633 10.676133,14.984524 L16.7909321,16.9788586 C16.8562226,16.9929529 16.9282674,17 17.0003122,17 C17.5519049,17 17.9999669,16.5325411 17.9999669,15.9546774 L17.9999669,1.04297361 C18.004436,0.467458892 17.5564076,-1.70530257e-13 17.0025635,-1.70530257e-13 Z" id="路径" fill="#000000" opacity="0.900000036"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 802 B

15
res/sp1/information.svg Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>信息</title>
<g id="信息" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.698195685">
<g id="编组" fill-rule="nonzero">
<g id="信息" transform="translate(1.000000, 0.999997)">
<path d="M11.007032,22 C6.55676196,22.0027822 2.54327787,19.3237757 0.83894937,15.2127934 C-0.865379135,11.1018111 0.075283932,6.36891739 3.22210066,3.22210066 C6.36891739,0.075283932 11.1018111,-0.865379135 15.2127934,0.83894937 C19.3237757,2.54327787 22.0027822,6.55676196 22,11.007032 C21.9924324,17.0751437 17.0751437,21.9924324 11.007032,22 L11.007032,22 Z" id="路径" stroke="#000000" stroke-width="2"></path>
<g id="编组-3" opacity="0.949999988" transform="translate(8.000000, 4.000003)" fill="#000000">
<path d="M1.87047168,12.5906542 L0.77623403,12.5906542 C0.379123006,12.5906542 0.0572009156,12.9125763 0.0572009156,13.3096873 C0.0572009156,13.7067983 0.379123006,14.0287204 0.77623403,14.0287204 L5.09043266,14.0287204 C5.48754368,14.0287204 5.80946577,13.7067983 5.80946577,13.3096873 C5.80946577,12.9125763 5.48754368,12.5906542 5.09043266,12.5906542 L4.027571,12.5906542 L4.027571,4.87995781 C4.02779657,4.41254085 3.72692003,3.99817578 3.28239123,3.85370148 C3.19763422,3.81944465 3.10711304,3.8016954 3.01569532,3.80140816 L3.00523666,3.80140816 C2.96821935,3.79953061 2.93113067,3.79953061 2.89411336,3.80140816 L1.3475385,3.80140816 C0.950485454,3.80149012 0.628653821,4.1233882 0.628653821,4.52044126 C0.628653821,4.91749432 0.950485454,5.23939239 1.3475385,5.23947436 L2.01820029,5.23947436 L2.01820029,12.5906542 L1.87047168,12.5906542 Z" id="路径"></path>
<path d="M2.86666667,7.32747196e-15 C2.09346802,7.32747196e-15 1.46666667,0.62680135 1.46666667,1.4 C1.46666667,2.17319865 2.09346802,2.8 2.86666667,2.8 C3.63986532,2.8 4.26666667,2.17319865 4.26666667,1.4 C4.26666667,0.62680135 3.63986532,7.32747196e-15 2.86666667,7.32747196e-15 L2.86666667,7.32747196e-15 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 732 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 B

10
res/sp1/labelbar.svg Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>标注</title>
<g id="标注" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.702148438">
<g id="标注" transform="translate(2.000000, 3.000000)">
<path d="M5.61097947,1 L15.5,1 C16.8807119,1 18,2.11928813 18,3.5 L18,15.5 C18,16.8807119 16.8807119,18 15.5,18 L3.5,18 C2.11928813,18 1,16.8807119 1,15.5 L1,10.0399084 L1,10.0399084" id="矩形" stroke="#000000" stroke-width="1.6" opacity="0.981179836" stroke-linecap="round" transform="translate(9.500000, 9.500000) scale(-1, 1) translate(-9.500000, -9.500000) "></path>
<path d="M20.6233505,1.25944115 C20.8960257,1.53369754 21.0335557,1.92560598 20.9930122,2.33261838 C20.9550677,2.70839552 20.7868957,3.05907092 20.5176193,3.32391616 L12.471714,11.3703605 L8,13 L9.63207624,8.52922318 L17.6771865,0.481983861 C18.2758,-0.116610543 19.2011467,-0.164307317 19.7409322,0.376256034 L20.6233505,1.2586462 L20.6233505,1.25944115 Z" id="路径" fill="#000000" fill-rule="nonzero"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

18
res/sp1/ocr.svg Normal file
View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>orc</title>
<g id="orc" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.695731027">
<g id="编组-4" transform="translate(2.000000, 2.000000)">
<g id="编组-2" stroke="#000000" stroke-width="2">
<path d="M12,12 L17,12 C18.6568542,12 20,13.3431458 20,15 L20,20 L20,20" id="矩形备份" transform="translate(16.000000, 16.000000) scale(1, -1) translate(-16.000000, -16.000000) "></path>
<path d="M0,12 L5,12 C6.65685425,12 8,13.3431458 8,15 L8,20 L8,20" id="矩形备份-2" transform="translate(4.000000, 16.000000) scale(-1, -1) translate(-4.000000, -16.000000) "></path>
<path d="M12,0 L17,0 C18.6568542,-3.04359188e-16 20,1.34314575 20,3 L20,8 L20,8" id="矩形"></path>
<path d="M0,0 L5,0 C6.65685425,-3.04359188e-16 8,1.34314575 8,3 L8,8 L8,8" id="矩形备份-11" transform="translate(4.000000, 4.000000) scale(-1, 1) translate(-4.000000, -4.000000) "></path>
</g>
<g id="编组-3" transform="translate(5.000000, 6.000000)" fill="#000000">
<rect id="矩形" x="0" y="0" width="10" height="2"></rect>
<rect id="矩形备份-3" transform="translate(5.000000, 4.500000) rotate(90.000000) translate(-5.000000, -4.500000) " x="0.5" y="3.5" width="9" height="2"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 541 B

10
res/sp1/originalSize.svg Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>原始大小</title>
<g id="原始大小" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.703404018">
<g id="编组" transform="translate(1.000000, 1.000000)">
<rect id="矩形" stroke="#000000" stroke-width="2" x="1" y="1" width="20" height="20" rx="4"></rect>
<path d="M16.391375,17.01425 C15.917,17.01425 15.692875,16.8025 15.692875,16.391375 L15.692875,6.6935 L14.172125,6.6935 C13.798125,6.6935 13.59875,6.48175 13.59875,6.05825 C13.59875,5.721375 13.78575,5.534375 14.172125,5.484875 L16.702125,5.484875 C17.001875,5.484875 17.15175,5.608625 17.15175,5.858875 L17.15175,16.379 C17.11325,16.8025 16.852,17.01425 16.391375,17.01425 Z M11.0055,14.77025 C10.45825,14.77025 10.18325,14.521375 10.18325,14.009875 C10.220375,13.54925 10.495375,13.27425 11.0055,13.187625 C11.4675,13.27425 11.741125,13.54925 11.829125,14.009875 C11.790625,14.521375 11.517,14.77025 11.0055,14.77025 Z M11.0055,9.447625 C10.495375,9.4105 10.220375,9.112125 10.18325,8.5635 C10.220375,8.1015 10.495375,7.827875 11.0055,7.739875 C11.4675,7.827875 11.741125,8.1015 11.829125,8.5635 C11.741125,9.112125 11.4675,9.4105 11.0055,9.447625 Z M6.63025,17.01425 C6.169625,17.01425 5.933125,16.8025 5.933125,16.391375 L5.933125,6.6935 L4.412375,6.6935 C4.038375,6.6935 3.839,6.48175 3.839,6.05825 C3.839,5.721375 4.026,5.534375 4.412375,5.484875 L6.942375,5.484875 C7.242125,5.484875 7.392,5.608625 7.392,5.858875 L7.392,16.379 C7.3535,16.8025 7.09225,17.01425 6.63025,17.01425 L6.63025,17.01425 Z" id="形状" fill="#000000" fill-rule="nonzero"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 465 B

Some files were not shown because too many files have changed in this diff Show More