Qt 图片加水印项目(类似豆瓣水印+下角单个水印)
作者:互联网
下午找了一套加水印的Qt代码,但效果不理想。在群里叶佬的修改下最后成型了。
叶佬牛逼~
感谢~
正文:
选择一个文件夹,他就会找出这个文件夹这个目录的所有图片并且进行加上水印操作。
对这个文件夹下的这三张图加水印。
没加水印和加了水印的。
mainwidget.cpp
#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <QFileDialog>
#include <QDebug>
#include <QFileInfoList>
#include <QImage>
#include <QPainter>
#include <QMatrix>
#include <cmath>
MainWidget::MainWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MainWidget)
{
ui->setupUi(this);
mPixmap.load(":/ShuiYin.png");
}
MainWidget::~MainWidget()
{
delete ui;
}
QFileInfoList MainWidget::GetFileList(QString path)
{
QDir dir(path);
QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
for(int i = 0; i != folder_list.size(); i++)
{
QString name = folder_list.at(i).absoluteFilePath();
QFileInfoList child_file_list = GetFileList(name);
file_list.append(child_file_list);
}
return file_list;
}
void MainWidget::on_pushButtonPath_clicked()
{
QString path = QFileDialog::getExistingDirectory(this, tr("Open Directory"));
ui->lineEditPath->setText(path);
}
void MainWidget::on_pushButtonAdd_clicked()
{
QFileInfoList list = GetFileList(ui->lineEditPath->text());
QString text = "Qt开发群:723516989";
foreach (QFileInfo info, list) {
qDebug() << info.absoluteFilePath() << info.absolutePath() << info.fileName();
QPixmap pm;
pm.load(info.absoluteFilePath());
QPainter painter(&pm);
//绘制图片
int tw = pm.width() / 8;
int th = tw * mPixmap.height() / mPixmap.width();
int tx = tw / 10;
int ty = pm.height() - tx - th;
//QMatrix leftmatrix;
//leftmatrix.rotate(180);
//painter.drawImage(image.rect(), image.transformed(leftmatrix));
painter.drawPixmap(QRect(tx, ty, tw, th), mPixmap, mPixmap.rect());
// 绘制文字
int fontSize = 9, spacing = 6;
QFont font(QStringLiteral("微软雅黑"), fontSize, QFont::Thin);
font.setLetterSpacing(QFont::AbsoluteSpacing, 2);
painter.setFont(font);
painter.setPen(QColor(183,183,183,220));
painter.translate(pm.width() / 2, -pm.width() / 2);//调整位置
qreal angle = 45;
painter.rotate(angle);
int squareEdgeSize = pm.width() * sin(angle) + pm.height() * sin(angle);//对角线长度
int hCount = squareEdgeSize / ((fontSize + spacing) * (text.size() + 1)) + 1;
int x = squareEdgeSize / hCount + (fontSize + spacing) * 3;
int y = x / 2;
for (int i = 0; i < hCount; i++){
for (int j = 0; j < hCount * 2; j++){
painter.drawText(x * i, y * j,text);
}
}
pm.save(info.absolutePath() + "/ZNQ" + info.fileName());
}
}
注意:这个水印过程中没有用多线程,会卡住界面。但适合自己批量加水印的小工具来用的。
标签:Qt,list,水印,下角,QDir,ui,include,QFileInfoList,MainWidget 来源: https://blog.csdn.net/weixin_48268336/article/details/111996333