diff --git a/NameCreater/INameCreater.h b/NameCreater/INameCreater.h index 66b0cfa..0112bd6 100644 --- a/NameCreater/INameCreater.h +++ b/NameCreater/INameCreater.h @@ -9,6 +9,7 @@ struct NameInfo_t { QString name2; QString bg_path; bool is_number_bg; + int bg_type; }; diff --git a/NameCreater/NameCreater.cpp b/NameCreater/NameCreater.cpp index 132a7b3..673338b 100644 --- a/NameCreater/NameCreater.cpp +++ b/NameCreater/NameCreater.cpp @@ -11,6 +11,7 @@ #include #include "FiveToSingle.h" +#include "OldFiveCreater.h" //#define BG_SAMPLE_PATH ":/NameCreater/resource/background_sample.jpg" @@ -33,6 +34,7 @@ NameCreater::NameCreater(QWidget *parent) { ui.setupUi(this); connect(ui.fivesingle_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); + connect(ui.fiveold_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); QString font_path = FONT_PATH; QFile font_res(font_path); @@ -67,13 +69,16 @@ NameCreater::NameCreater(QWidget *parent) } void NameCreater::OnClickedReadBtn() { - auto fileContentReady = [this](const QString &fileName, const QByteArray &fileContent) { + auto sender =(QPushButton*) QObject::sender(); + + auto fileContentReady = [this, sender](const QString &fileName, const QByteArray &fileContent) { if (fileName.isEmpty()) { // No file was selected } else { // Use fileName and fileContent - FiveToSingle().generaImageFromCSV(fileName, fileContent, this->font, this->font_color); + 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); } }; diff --git a/NameCreater/NameCreater.pri b/NameCreater/NameCreater.pri index 15d6a4f..e7a554a 100644 --- a/NameCreater/NameCreater.pri +++ b/NameCreater/NameCreater.pri @@ -7,8 +7,15 @@ message("You are running qmake on a generated .pro file. This may not work!") -HEADERS += ./NameCreater.h -SOURCES += ./NameCreater.cpp \ - ./main.cpp +HEADERS += ./FiveToSingle.h \ + ./INameCreater.h \ + ./resource.h \ + ./NameCreater.h \ + ./OldFiveCreater.h +SOURCES += ./FiveToSingle.cpp \ + ./INameCreater.cpp \ + ./NameCreater.cpp \ + ./main.cpp \ + ./OldFiveCreater.cpp FORMS += ./NameCreater.ui RESOURCES += NameCreater.qrc diff --git a/NameCreater/NameCreater.vcxproj b/NameCreater/NameCreater.vcxproj index ab44369..8fdf915 100644 --- a/NameCreater/NameCreater.vcxproj +++ b/NameCreater/NameCreater.vcxproj @@ -175,6 +175,7 @@ + @@ -186,6 +187,7 @@ + diff --git a/NameCreater/NameCreater.vcxproj.filters b/NameCreater/NameCreater.vcxproj.filters index 9a907c1..8ef00b2 100644 --- a/NameCreater/NameCreater.vcxproj.filters +++ b/NameCreater/NameCreater.vcxproj.filters @@ -46,6 +46,9 @@ Source Files + + Source Files + @@ -57,6 +60,9 @@ Header Files + + Header Files + diff --git a/NameCreater/OldFiveCreater.cpp b/NameCreater/OldFiveCreater.cpp new file mode 100644 index 0000000..87cb278 --- /dev/null +++ b/NameCreater/OldFiveCreater.cpp @@ -0,0 +1,152 @@ +#include "OldFiveCreater.h" +#include +#include +#include +#include + + +#define BG_MIX_PATH ":/NameCreater/resource/background.jpg" +#define BG_BOY_PATH ":/NameCreater/resource/background_boy.jpg" +#define BG_GIRL_PATH ":/NameCreater/resource/background_girl.jpg" + +static QPointF BOY_POS[] = { + QPointF(235, 387), QPointF(366, 1433), + QPointF(555, 387), QPointF(692, 1433), + QPointF(878, 387), QPointF(1014, 1433), + QPointF(1200, 387), QPointF(1337, 1433), + QPointF(1527, 387), QPointF(1663, 1433), +}; + +static int BOY_POS_COUNT = sizeof(BOY_POS) / sizeof(BOY_POS[0]); + + +static QPointF GIRL_POS[] = { + QPointF(1854, 387), QPointF(1987, 1433), + QPointF(2176, 387), QPointF(2314, 1433), + QPointF(2498, 387), QPointF(2635, 1433), + QPointF(2821, 387), QPointF(2958, 1433), + QPointF(3147, 387), QPointF(3285, 1433), +}; + +static int GIRL_POS_COUNT = sizeof(GIRL_POS) / sizeof(GIRL_POS[0]); + + +OldFiveCreater::OldFiveCreater():INameCreater() +{ +} + +OldFiveCreater::~OldFiveCreater() +{ +} + +QList OldFiveCreater::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()) + { + NameInfo_t info; + QString line = stream.readLine(); + QString name_tc = line; + QStringList csvList = name_tc.split(','); + + + QString name1 = csvList.at(0); //QString::fromLocal8Bit(csvList.at(0)); + QString name2 = csvList.at(1);//QString::fromLocal8Bit(csvList.at(1)); + QString type_str = csvList.last();//QString::fromLocal8Bit(csvList.last()); + qDebug() << "row :" << row << " " << name1 << " " << name2; + + if (name1.compare("name_1") == 0 || name2.compare("name_2") == 0) { + continue; + } + + info.name1 = name1; + info.name2 = name2; + info.bg_type = type_str.contains(QRegExp("boy")) ? 1 : (type_str.contains(QRegExp("girl"))) ? 2 : 0; + + nameList.append(info); + + row++; + } + return nameList; +} + +void OldFiveCreater::generaImageFromCSV(const QString& filename, const QByteArray& filecontent, const QFont& font, const QColor& font_color) +{ + int export_times = 0; + + QList nameList = getNameByFileContent(filecontent); + if (nameList.isEmpty()) { + QMessageBox msgBox; + msgBox.setText(QString("Name is empty ! ").append(filename)); + msgBox.exec(); + } + + + QGraphicsScene scene; + QGraphicsView view(&scene); + + + for (int n = 0; n < nameList.length(); n++) { + //msgBox.setText(QString().sprintf("Export: %d / %d", export_times, nameList.length())); + + NameInfo_t name_info = nameList.at(n); + + scene.clear(); + QImage image((name_info.bg_type == 1) ? BG_BOY_PATH : (name_info.bg_type == 2) ? BG_GIRL_PATH : BG_MIX_PATH); + QGraphicsPixmapItem* bgItem = new QGraphicsPixmapItem(QPixmap::fromImage(image)); + scene.addItem(bgItem); + + + for (int j = 0; j < 2; j++) { + int flag = j % 2; + QString name = (flag == 0) ? name_info.name1 : name_info.name2; + for (int i = 0; i < BOY_POS_COUNT; i++) { + int xscale, yscale; + xscale = yscale = (i % 2 == 1) ? -1 : 1; + QPointF pos = (flag == 0) ? BOY_POS[i] : GIRL_POS[i]; + + QGraphicsTextItem* textItem1 = new QGraphicsTextItem(name.mid(0, 1)); + textItem1->setFont(font); + textItem1->setDefaultTextColor(font_color); + textItem1->setPos(pos); + textItem1->setTransform(QTransform::fromScale(xscale, yscale)); + scene.addItem(textItem1); + + QGraphicsTextItem* textItem2 = new QGraphicsTextItem(name.mid(1, 1)); + textItem2->setFont(font); + textItem2->setDefaultTextColor(font_color); + textItem2->setPos(pos.x(), pos.y() + 148 * xscale); + textItem2->setTransform(QTransform::fromScale(xscale, yscale)); + scene.addItem(textItem2); + + QGraphicsTextItem* textItem3 = new QGraphicsTextItem(name.mid(2, 1)); + textItem3->setFont(font); + textItem3->setDefaultTextColor(font_color); + textItem3->setPos(pos.x(), pos.y() + 294 * xscale); + textItem3->setTransform(QTransform::fromScale(xscale, yscale)); + scene.addItem(textItem3); + } + } + // if (name_info.bg_type == 0) { + // view.show(); + // break; + // } + + QString file_name = QString("%1_%2_%3.jpg").arg(QString::number(export_times + 1), name_info.name1, name_info.name2); + saveToImage(file_name, &scene); + export_times++; + } + + + QMessageBox msgBox; + msgBox.setText(QString().asprintf("Export Finshed. Count:%d", export_times)); + msgBox.exec(); + + +} diff --git a/NameCreater/OldFiveCreater.h b/NameCreater/OldFiveCreater.h new file mode 100644 index 0000000..908656c --- /dev/null +++ b/NameCreater/OldFiveCreater.h @@ -0,0 +1,15 @@ +#pragma once +#include "INameCreater.h" +class OldFiveCreater : + public INameCreater +{ +public: + OldFiveCreater(); + ~OldFiveCreater(); + +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/name.csv b/NameCreater/_exp/five_to_single.csv similarity index 100% rename from NameCreater/_exp/name.csv rename to NameCreater/_exp/five_to_single.csv diff --git a/NameCreater/_exp/old_five.csv b/NameCreater/_exp/old_five.csv new file mode 100644 index 0000000..97db021 --- /dev/null +++ b/NameCreater/_exp/old_five.csv @@ -0,0 +1,4 @@ +name_1,name_2,bg_type +Ĭ´é¶£,Ĭ¤_®¦,mix +³¯¥K®¦,³¯¬f¿Î,boy +§õ«Bªä,§õ«Bªä,girl diff --git a/NameCreater/resource/background.jpg b/NameCreater/resource/background.jpg new file mode 100644 index 0000000..5b801c5 Binary files /dev/null and b/NameCreater/resource/background.jpg differ diff --git a/NameCreater/resource/background_boy.jpg b/NameCreater/resource/background_boy.jpg new file mode 100644 index 0000000..75b0fb5 Binary files /dev/null and b/NameCreater/resource/background_boy.jpg differ diff --git a/NameCreater/resource/background_girl.jpg b/NameCreater/resource/background_girl.jpg new file mode 100644 index 0000000..cb25e96 Binary files /dev/null and b/NameCreater/resource/background_girl.jpg differ