diff --git a/NameCreater/BirthdayCreater.cpp b/NameCreater/BirthdayCreater.cpp index 31220d1..10371e4 100644 --- a/NameCreater/BirthdayCreater.cpp +++ b/NameCreater/BirthdayCreater.cpp @@ -4,8 +4,7 @@ #include #include -#define BG_WIDTH 3508 -#define BG_HEIGHT 2481 + #define LABEL_HIGHT_LIMIT 350.0 #define LABEL_POS_X_OFFSET 323.0 diff --git a/NameCreater/FiveToSingle.cpp b/NameCreater/FiveToSingle.cpp index e449c98..e622bee 100644 --- a/NameCreater/FiveToSingle.cpp +++ b/NameCreater/FiveToSingle.cpp @@ -80,7 +80,8 @@ void FiveToSingle::generaImageFromCSV(const QString& filename, const QByteArray& NameInfo_t name_info = nameList.at(n); QImage name_image(name_info.bg_path); if (idx == 0) { - QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, 3508, 2482); + + QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, BG_WIDTH, BG_HEIGHT); bg_item->setBrush(QBrush(QColor(255, 255, 255))); scene.addItem(bg_item); } diff --git a/NameCreater/INameCreater.h b/NameCreater/INameCreater.h index 0112bd6..f0f1f46 100644 --- a/NameCreater/INameCreater.h +++ b/NameCreater/INameCreater.h @@ -4,6 +4,9 @@ #include #include +#define BG_WIDTH 3508 +#define BG_HEIGHT 2481 + struct NameInfo_t { QString name1; QString name2; diff --git a/NameCreater/NameCreater.cpp b/NameCreater/NameCreater.cpp index 11da7c0..4731123 100644 --- a/NameCreater/NameCreater.cpp +++ b/NameCreater/NameCreater.cpp @@ -13,11 +13,15 @@ #include "FiveToSingle.h" #include "OldFiveCreater.h" #include "BirthdayCreater.h" +#include "TowelCreater.h" #define FONT_NAME "DFYuanStd-W8.otf" #define FONT_PATH ":/NameCreater/_exp/DFYuanStd-W8.otf" #define FONT_SIZE 120 + +#define TOWEL_FONT_PATH ":/NameCreater/_exp/W1.ttc" + #define VERSION "v1.2.0" @@ -28,6 +32,7 @@ NameCreater::NameCreater(QWidget *parent) connect(ui.fivesingle_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); connect(ui.fiveold_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); connect(ui.birthday_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); + connect(ui.towel_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); QString font_path = FONT_PATH; QFile font_res(font_path); @@ -41,9 +46,24 @@ NameCreater::NameCreater(QWidget *parent) int id = QFontDatabase::addApplicationFontFromData(font_res.readAll()); QStringList family_list = QFontDatabase::applicationFontFamilies(id); - font = QFont(family_list.at(0)); font.setPixelSize(FONT_SIZE); + font_res.close(); + + font_path = QString(TOWEL_FONT_PATH); + QFile font_res_towel(font_path); + if (!font_res_towel.open(QIODevice::ReadOnly)) { + QMessageBox msgBox; + msgBox.setText("Can not load font file!" + font_path); + msgBox.exec(); + font_res_towel.close(); + } + + id = QFontDatabase::addApplicationFontFromData(font_res_towel.readAll()); + font_towel = QFont(QFontDatabase::applicationFontFamilies(id).at(0)); + font_towel.setPixelSize(240); + font_towel.setLetterSpacing(QFont::PercentageSpacing, 42); + font_color = QColor(0, 0, 0); QFont tital_font = QFont(font); @@ -56,13 +76,13 @@ NameCreater::NameCreater(QWidget *parent) ui.version_label->setFont(version_font); ui.version_label->setText(VERSION); - QList titals = this->findChildren(QRegExp("tital_label")); + QList titals = findChildren(QRegExp("tital_label")); foreach(auto tital, titals) { tital->setFont(tital_font); } - font_res.close(); + } @@ -78,9 +98,10 @@ void NameCreater::OnClickedReadBtn() { // Use fileName and fileContent if(sender == ui.fivesingle_btn) FiveToSingle().generaImageFromCSV(fileName, fileContent, this->font, this->font_color); if(sender == ui.fiveold_btn) OldFiveCreater().generaImageFromCSV(fileName, fileContent, this->font, this->font_color); - if (sender == ui.birthday_btn) BirthdayCreater().generaImageFromCSV(fileName, fileContent, this->font, this->font_color); + if(sender == ui.birthday_btn) BirthdayCreater().generaImageFromCSV(fileName, fileContent, this->font, this->font_color); + if (sender == ui.towel_btn) TowelCreater().generaImageFromCSV(fileName, fileContent, this->font_towel, this->font_color); } }; QFileDialog::getOpenFileContent("CSV (*.csv)", fileContentReady); -} \ No newline at end of file +} diff --git a/NameCreater/NameCreater.h b/NameCreater/NameCreater.h index 0bddc86..7f83ce3 100644 --- a/NameCreater/NameCreater.h +++ b/NameCreater/NameCreater.h @@ -12,10 +12,12 @@ public: private: Ui::NameCreaterClass ui; - QFont font; + QFont font, font_towel; + QColor font_color; + private Q_SLOTS: void OnClickedReadBtn(); }; diff --git a/NameCreater/NameCreater.pri b/NameCreater/NameCreater.pri index b506b9e..7e77057 100644 --- a/NameCreater/NameCreater.pri +++ b/NameCreater/NameCreater.pri @@ -9,15 +9,17 @@ message("You are running qmake on a generated .pro file. This may not work!") HEADERS += ./resource.h \ ./NameCreater.h \ + ./BirthdayCreater.h \ ./FiveToSingle.h \ ./INameCreater.h \ ./OldFiveCreater.h \ - ./BirthdayCreater.h + ./TowelCreater.h SOURCES += ./NameCreater.cpp \ ./main.cpp \ + ./BirthdayCreater.cpp \ ./OldFiveCreater.cpp \ ./FiveToSingle.cpp \ ./INameCreater.cpp \ - ./BirthdayCreater.cpp + ./TowelCreater.cpp FORMS += ./NameCreater.ui RESOURCES += NameCreater.qrc diff --git a/NameCreater/NameCreater.pro.user b/NameCreater/NameCreater.pro.user index a0ed3df..f32bdc7 100644 --- a/NameCreater/NameCreater.pro.user +++ b/NameCreater/NameCreater.pro.user @@ -1,10 +1,10 @@ - + EnvironmentId - {f917f426-b975-46c9-8edb-fd77a95b6be2} + {4a5c8cc9-7483-402d-a0a2-3701e5257fd0} ProjectExplorer.Project.ActiveTarget @@ -91,16 +91,16 @@ ProjectExplorer.Project.Target.0 Desktop - Desktop Qt 5.15.2 MSVC2019 64bit - Desktop Qt 5.15.2 MSVC2019 64bit - qt.qt5.5152.win64_msvc2019_64_kit + Desktop Qt 5.15.2 MinGW 64-bit + Desktop Qt 5.15.2 MinGW 64-bit + qt.qt5.5152.win64_mingw81_kit 0 0 0 0 - D:\_0E\_Private\_Software\namecreater\build-NameCreater-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug - D:/_0E/_Private/_Software/namecreater/build-NameCreater-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug + D:\_develop\_project\NameCreater\build-NameCreater-Desktop_Qt_5_15_2_MinGW_64_bit-Debug + D:/_develop/_project/NameCreater/build-NameCreater-Desktop_Qt_5_15_2_MinGW_64_bit-Debug true @@ -138,8 +138,8 @@ 2 - D:\_0E\_Private\_Software\namecreater\build-NameCreater-Desktop_Qt_5_15_2_MSVC2019_64bit-Release - D:/_0E/_Private/_Software/namecreater/build-NameCreater-Desktop_Qt_5_15_2_MSVC2019_64bit-Release + D:\_develop\_project\NameCreater\build-NameCreater-Desktop_Qt_5_15_2_MinGW_64_bit-Release + D:/_develop/_project/NameCreater/build-NameCreater-Desktop_Qt_5_15_2_MinGW_64_bit-Release true @@ -179,8 +179,8 @@ 0 - D:\_0E\_Private\_Software\namecreater\build-NameCreater-Desktop_Qt_5_15_2_MSVC2019_64bit-Profile - D:/_0E/_Private/_Software/namecreater/build-NameCreater-Desktop_Qt_5_15_2_MSVC2019_64bit-Profile + D:\_develop\_project\NameCreater\build-NameCreater-Desktop_Qt_5_15_2_MinGW_64_bit-Profile + D:/_develop/_project/NameCreater/build-NameCreater-Desktop_Qt_5_15_2_MinGW_64_bit-Profile true @@ -257,14 +257,14 @@ 2 - Qt4ProjectManager.Qt4RunConfiguration:D:/_0E/_Private/_Software/namecreater/NameCreater/NameCreater.pro - D:/_0E/_Private/_Software/namecreater/NameCreater/NameCreater.pro + Qt4ProjectManager.Qt4RunConfiguration:D:/_develop/_project/NameCreater/NameCreater/NameCreater.pro + D:/_develop/_project/NameCreater/NameCreater/NameCreater.pro false true true false true - D:/_0E/_Private/_Software/namecreater/build-NameCreater-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug + D:/_develop/_project/NameCreater/build-NameCreater-Desktop_Qt_5_15_2_MinGW_64_bit-Debug 1 diff --git a/NameCreater/NameCreater.qrc b/NameCreater/NameCreater.qrc index d6e805a..f3e2a70 100644 --- a/NameCreater/NameCreater.qrc +++ b/NameCreater/NameCreater.qrc @@ -44,5 +44,6 @@ resource/st.jpg resource/w.jpg resource/y.jpg + _exp/W1.ttc diff --git a/NameCreater/NameCreater.vcxproj b/NameCreater/NameCreater.vcxproj index 7ef867f..158b30f 100644 --- a/NameCreater/NameCreater.vcxproj +++ b/NameCreater/NameCreater.vcxproj @@ -180,6 +180,7 @@ + @@ -194,6 +195,7 @@ + diff --git a/NameCreater/NameCreater.vcxproj.filters b/NameCreater/NameCreater.vcxproj.filters index 3026dcc..f1fd21c 100644 --- a/NameCreater/NameCreater.vcxproj.filters +++ b/NameCreater/NameCreater.vcxproj.filters @@ -55,6 +55,9 @@ Creaters + + Creaters + @@ -72,6 +75,9 @@ Creaters + + Creaters + diff --git a/NameCreater/TowelCreater.cpp b/NameCreater/TowelCreater.cpp new file mode 100644 index 0000000..438a468 --- /dev/null +++ b/NameCreater/TowelCreater.cpp @@ -0,0 +1,158 @@ +#include "TowelCreater.h" +#include +#include +#include +#include + + + +static QString LABEL_BG_PATH[] = { ":/NameCreater/resource/girl_bg.jpg",":/NameCreater/resource/boy_bg.jpg" }; +static qreal LABEL_POS_X[] = { 250,1645,3300 }; + +static qreal LABEL_POS_Y_START = 120; +static qreal LABEL_POS_Y_DIFF = 315; + + +static qreal NAME_OFFSET_X[] = { 128, 715 }; +static qreal NAME_OFFSET_Y = 38; +static qreal NAME_TWO_WORD_OFFSET = 25; + +static int MAX_LABEL_IN_PAPER = 15; +static int LABEL_MAX_NUM_PER_COL = 7; +static int FONT_PIXEL_SIZE = 240; + +static qreal LABEL_HIGHT_LIMIT = 350; +static int TEXT_WIDTH = 800; + +TowelCreater::TowelCreater() +{ +} + +TowelCreater::~TowelCreater() +{ +} + +QList TowelCreater::getNameByFileContent(const QByteArray& conetent) +{ + + QList nameList; + + QTextCodec* tc = QTextCodec::codecForName("Big5"); + QString codec = tc->toUnicode(conetent.data()); + QTextStream stream(&codec); + + int row = 0; + while (!stream.atEnd()) + { + + QString line = stream.readLine(); + QString name_tc = line; + QStringList csvList = name_tc.split(','); + + + QString name = csvList.at(0); //QString::fromLocal8Bit(csvList.at(0)); + QString bg_type = csvList.at(1);//QString::fromLocal8Bit(csvList.at(1)); + int num = csvList.last().toInt();//QString::fromLocal8Bit(csvList.last()); + qDebug() << "row :" << row << " " << name << ", bg_type: " << bg_type << "Count: " < nameList = getNameByFileContent(filecontent); + if (nameList.isEmpty()) { + QMessageBox msgBox; + msgBox.setText(QString("Name is empty ! ").append(filename)); + msgBox.exec(); + } + + QGraphicsScene scene; + scene.setBackgroundBrush(QBrush(QColor(255, 255, 255))); + QGraphicsView view(&scene); + + + for (int idx = 0; idx < nameList.length(); idx++) { + NameInfo_t name = nameList.at(idx); + if ((idx % MAX_LABEL_IN_PAPER) == 0) { + QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, BG_WIDTH, BG_HEIGHT); + bg_item->setBrush(QBrush(QColor(255, 255, 255))); + //QGraphicsPixmapItem* bg_item = QGraphicsPixmapItem(QPixmap(BG_SMAPLE_PATH)); + scene.addItem(bg_item); + + } + + int col_idx = (idx % MAX_LABEL_IN_PAPER) / LABEL_MAX_NUM_PER_COL; + int col_num = (idx % MAX_LABEL_IN_PAPER) % LABEL_MAX_NUM_PER_COL; + + QString label_rel_path = LABEL_BG_PATH[name.bg_type]; + + if (col_idx < 2) { + QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path)); + label_item->setPos(LABEL_POS_X[col_idx], LABEL_POS_Y_START + LABEL_POS_Y_DIFF * col_num); + label_item->setOpacity(1); + scene.addItem(label_item); + + for (int i = 0; i < 2; ++i) { + qreal offset_x = name.name1.count() == 2 ? NAME_TWO_WORD_OFFSET : 0; + QGraphicsTextItem* name_item = new QGraphicsTextItem(name.name1); + name_item->setTextWidth(TEXT_WIDTH); + name_item->setFont(font); + name_item->setDefaultTextColor(font_color); + name_item->setPos(label_item->x() + NAME_OFFSET_X[i] + offset_x, label_item->y() + NAME_OFFSET_Y); + scene.addItem(name_item); + } + + } + else { + QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path)); + label_item->setRotation(90); + label_item->setPos(LABEL_POS_X[col_idx], LABEL_POS_Y_START + LABEL_POS_Y_DIFF * col_num); + label_item->setOpacity(1); + scene.addItem(label_item); + + + for (int i = 0; i < 2; ++i) { + qreal offset_x = name.name1.count() == 2 ? NAME_TWO_WORD_OFFSET : 0; + QGraphicsTextItem* name_item = new QGraphicsTextItem(name.name1); + name_item->setTextWidth(TEXT_WIDTH); + name_item->setFont(font); + name_item->setDefaultTextColor(font_color); + name_item->setRotation(90); + name_item->setPos(label_item->x() - NAME_OFFSET_Y, label_item->y() + NAME_OFFSET_X[i] + offset_x); + scene.addItem(name_item); + } + + } + + if ((idx % MAX_LABEL_IN_PAPER == MAX_LABEL_IN_PAPER - 1) || idx == nameList.count() - 1) { + QString file_name = QString("%1_.jpg").arg(QString::number(export_times + 1)); + saveToImage(file_name, &scene); + export_times++; + + scene.clear(); + } + + + } + + +} diff --git a/NameCreater/TowelCreater.h b/NameCreater/TowelCreater.h new file mode 100644 index 0000000..4548745 --- /dev/null +++ b/NameCreater/TowelCreater.h @@ -0,0 +1,14 @@ +#pragma once +#include "INameCreater.h" +class TowelCreater : public INameCreater +{ +public: + TowelCreater(); + ~TowelCreater(); + +protected: + QList getNameByFileContent(const QByteArray& conetent); +public: + virtual void generaImageFromCSV(const QString& filename, const QByteArray& filecontent, const QFont& font, const QColor& font_color); +}; + diff --git a/NameCreater/_exp/W1.ttc b/NameCreater/_exp/W1.ttc new file mode 100644 index 0000000..14ee5f3 Binary files /dev/null and b/NameCreater/_exp/W1.ttc differ diff --git a/NameCreater/_exp/towel.csv b/NameCreater/_exp/towel.csv new file mode 100644 index 0000000..4e7600c --- /dev/null +++ b/NameCreater/_exp/towel.csv @@ -0,0 +1,5 @@ +name,bg_type,num +³¯¦u§Ó,b,16 +§d¨Î¹a,g,13 +«Å´r,b,1 +«Å´r,g,2 \ No newline at end of file