mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-06 14:29:54 +08:00
fix image issue
1. Do not judge the image format from the file suffix; 2. Enable file: scheme in Markdown-it;
This commit is contained in:
parent
4afefbe964
commit
2dbb114b47
@ -243,21 +243,20 @@ void VInsertImageDialog::handlePathEditChanged()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage image(text);
|
QImage image;
|
||||||
if (image.isNull()) {
|
if (url.isLocalFile()) {
|
||||||
|
image = VUtils::imageFromFile(url.toLocalFile());
|
||||||
|
setImage(image);
|
||||||
|
m_imageType = ImageType::LocalFile;
|
||||||
|
qDebug() << "fetch local file image to insert" << text;
|
||||||
|
} else {
|
||||||
setImage(QImage());
|
setImage(QImage());
|
||||||
// Try to treat it as network image.
|
|
||||||
m_imageType = ImageType::ImageData;
|
m_imageType = ImageType::ImageData;
|
||||||
VDownloader *downloader = new VDownloader(this);
|
VDownloader *downloader = new VDownloader(this);
|
||||||
connect(downloader, &VDownloader::downloadFinished,
|
connect(downloader, &VDownloader::downloadFinished,
|
||||||
this, &VInsertImageDialog::imageDownloaded);
|
this, &VInsertImageDialog::imageDownloaded);
|
||||||
downloader->download(url.toString());
|
downloader->download(url.toString());
|
||||||
qDebug() << "try to fetch network image to insert" << text;
|
qDebug() << "try to fetch network image to insert" << text;
|
||||||
} else {
|
|
||||||
// Local image path.
|
|
||||||
setImage(image);
|
|
||||||
m_imageType = ImageType::LocalFile;
|
|
||||||
qDebug() << "fetch local file image to insert" << text;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handleInputChanged();
|
handleInputChanged();
|
||||||
|
@ -72,6 +72,14 @@ mdit = mdit.use(window.markdownitHeadingAnchor, {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Enable file: scheme.
|
||||||
|
var validateLinkMDIT = mdit.validateLink;
|
||||||
|
var fileSchemeRE = /^file:/;
|
||||||
|
mdit.validateLink = function(url) {
|
||||||
|
var str = url.trim().toLowerCase();
|
||||||
|
return fileSchemeRE.test(str) ? true : validateLinkMDIT(url);
|
||||||
|
};
|
||||||
|
|
||||||
mdit = mdit.use(window.markdownitTaskLists);
|
mdit = mdit.use(window.markdownitTaskLists);
|
||||||
|
|
||||||
if (VMarkdownitOption.sub) {
|
if (VMarkdownitOption.sub) {
|
||||||
|
@ -1476,3 +1476,31 @@ const QTreeWidgetItem *VUtils::topLevelTreeItem(const QTreeWidgetItem *p_item)
|
|||||||
return p_item;
|
return p_item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QImage VUtils::imageFromFile(const QString &p_filePath)
|
||||||
|
{
|
||||||
|
QImage img;
|
||||||
|
QFile file(p_filePath);
|
||||||
|
if (!file.open(QIODevice::ReadOnly)) {
|
||||||
|
qWarning() << "fail to open image file" << p_filePath;
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.loadFromData(file.readAll());
|
||||||
|
qDebug() << "imageFromFile" << p_filePath << img.isNull() << img.format();
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPixmap VUtils::pixmapFromFile(const QString &p_filePath)
|
||||||
|
{
|
||||||
|
QPixmap pixmap;
|
||||||
|
QFile file(p_filePath);
|
||||||
|
if (!file.open(QIODevice::ReadOnly)) {
|
||||||
|
qWarning() << "fail to open pixmap file" << p_filePath;
|
||||||
|
return pixmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
pixmap.loadFromData(file.readAll());
|
||||||
|
qDebug() << "pixmapFromFile" << p_filePath << pixmap.isNull();
|
||||||
|
return pixmap;
|
||||||
|
}
|
||||||
|
@ -320,6 +320,13 @@ public:
|
|||||||
|
|
||||||
static const QTreeWidgetItem *topLevelTreeItem(const QTreeWidgetItem *p_item);
|
static const QTreeWidgetItem *topLevelTreeItem(const QTreeWidgetItem *p_item);
|
||||||
|
|
||||||
|
// Read QImage from local file @p_filePath.
|
||||||
|
// Directly calling QImage(p_filePath) will judge the image format from the suffix,
|
||||||
|
// resulting a null image in wrong suffix case.
|
||||||
|
static QImage imageFromFile(const QString &p_filePath);
|
||||||
|
|
||||||
|
static QPixmap pixmapFromFile(const QString &p_filePath);
|
||||||
|
|
||||||
// Regular expression for image link.
|
// Regular expression for image link.
|
||||||
// 
|
// 
|
||||||
// Captured texts (need to be trimmed):
|
// Captured texts (need to be trimmed):
|
||||||
|
@ -148,12 +148,12 @@ bool VMdEditOperations::insertImageFromURL(const QUrl &imageUrl)
|
|||||||
// Whether it is a local file or web URL
|
// Whether it is a local file or web URL
|
||||||
if (isLocal) {
|
if (isLocal) {
|
||||||
imagePath = imageUrl.toLocalFile();
|
imagePath = imageUrl.toLocalFile();
|
||||||
image = QImage(imagePath);
|
image = VUtils::imageFromFile(imagePath);
|
||||||
|
|
||||||
if (image.isNull()) {
|
if (image.isNull()) {
|
||||||
qWarning() << "image is null";
|
qWarning() << "inserted image is null" << imagePath;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
title = "Insert Image From File";
|
title = "Insert Image From File";
|
||||||
} else {
|
} else {
|
||||||
imagePath = imageUrl.toString();
|
imagePath = imageUrl.toString();
|
||||||
|
@ -222,7 +222,11 @@ QString VPreviewManager::fetchImagePathToPreview(const QString &p_text, QString
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
QUrl url(p_url);
|
QUrl url(p_url);
|
||||||
imagePath = url.toString();
|
if (url.isLocalFile()) {
|
||||||
|
imagePath = url.toLocalFile();
|
||||||
|
} else {
|
||||||
|
imagePath = url.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,12 +242,11 @@ QString VPreviewManager::imageResourceName(const ImageLinkInfo &p_link)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add it to the resource.
|
// Add it to the resource.
|
||||||
QString imgPath = p_link.m_linkUrl;
|
|
||||||
QFileInfo info(imgPath);
|
|
||||||
QPixmap image;
|
QPixmap image;
|
||||||
if (info.exists()) {
|
QString imgPath = p_link.m_linkUrl;
|
||||||
|
if (QFileInfo::exists(imgPath)) {
|
||||||
// Local file.
|
// Local file.
|
||||||
image = QPixmap(imgPath);
|
image = VUtils::pixmapFromFile(imgPath);
|
||||||
} else {
|
} else {
|
||||||
// URL. Try to download it.
|
// URL. Try to download it.
|
||||||
m_downloader->download(imgPath);
|
m_downloader->download(imgPath);
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "utils/viconutils.h"
|
#include "utils/viconutils.h"
|
||||||
#include "vconfigmanager.h"
|
#include "vconfigmanager.h"
|
||||||
#include "utils/vwebutils.h"
|
#include "utils/vwebutils.h"
|
||||||
|
#include "utils/vutils.h"
|
||||||
|
|
||||||
extern VConfigManager *g_config;
|
extern VConfigManager *g_config;
|
||||||
|
|
||||||
@ -139,7 +140,7 @@ void VWebView::copyImage()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!imgPath.isEmpty()) {
|
if (!imgPath.isEmpty()) {
|
||||||
QImage img(imgPath);
|
QImage img = VUtils::imageFromFile(imgPath);
|
||||||
if (!img.isNull()) {
|
if (!img.isNull()) {
|
||||||
m_afterCopyImage = false;
|
m_afterCopyImage = false;
|
||||||
VClipboardUtils::setImageToClipboard(clipboard, img, QClipboard::Clipboard);
|
VClipboardUtils::setImageToClipboard(clipboard, img, QClipboard::Clipboard);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user