File indexing completed on 2024-05-12 04:01:33
0001 /* 0002 SPDX-FileCopyrightText: 2010-2016 Sune Vuorela <sune@vuorela.dk> 0003 0004 SPDX-License-Identifier: MIT 0005 */ 0006 0007 #include <Prison/Barcode> 0008 0009 #include <QCoreApplication> 0010 #include <QImageWriter> 0011 #include <QStringList> 0012 0013 #include <iostream> 0014 #include <qtextstream.h> 0015 #include <stdlib.h> 0016 0017 void error(const QString &error, const QString &errormessage) 0018 { 0019 QTextStream str(stdout); 0020 str << error << ": " << errormessage << '\n'; 0021 str.flush(); 0022 exit(0); 0023 } 0024 0025 int main(int argc, char *argv[]) 0026 { 0027 QCoreApplication app(argc, argv); 0028 0029 QString size; 0030 QString outputfile; 0031 QString outputformat; 0032 QStringList arguments = app.arguments(); 0033 0034 arguments.takeFirst(); // Program (argv[0]). 0035 while (!arguments.isEmpty()) { 0036 QString argument = arguments.takeFirst(); 0037 if (argument == QLatin1String("--")) { 0038 break; // rest is data 0039 } else if (argument == QLatin1String("--size") || argument == QLatin1String("-s")) { 0040 size = arguments.takeFirst(); 0041 } else if (argument == QLatin1String("--outputfile") || argument == QLatin1String("--output-file") || argument == QLatin1String("-o")) { 0042 outputfile = arguments.takeFirst(); 0043 } else if (argument == QLatin1String("--output-format") || argument == QLatin1String("--output-format") || argument == QLatin1String("-f")) { 0044 outputformat = arguments.takeFirst(); 0045 } else if (argument.startsWith(QLatin1String("-"))) { 0046 error(QStringLiteral("unknown argument"), argument); 0047 } else { 0048 break; 0049 } 0050 } 0051 0052 if (outputformat.isEmpty()) { 0053 outputformat = QStringLiteral("png"); 0054 } 0055 0056 if (!QImageWriter::supportedImageFormats().contains(outputformat.toLocal8Bit())) { 0057 error(QStringLiteral("unsupported output format"), outputformat); 0058 } 0059 0060 if (outputfile.isEmpty()) { 0061 error(QStringLiteral("outputfile is missing"), QString()); 0062 } 0063 0064 bool ok = false; 0065 int intsize = size.toInt(&ok); 0066 if (!ok) { 0067 error(QStringLiteral("size not a int"), size); 0068 } 0069 if (intsize < 10) { 0070 error(QStringLiteral("needs a larger output size"), size); 0071 } 0072 0073 QString data = arguments.join(QLatin1Char(' ')); 0074 if (data.size() == 0) { 0075 QTextStream in(stdin); 0076 data = in.readAll(); 0077 if (data.size() == 0) { 0078 error(QStringLiteral("No data, neither on commandline nor on stdin"), QString()); 0079 } 0080 } 0081 0082 auto barcode = Prison::Barcode::create(Prison::DataMatrix); 0083 if (!barcode) { 0084 error(QStringLiteral("unsupported barcode type"), QString()); 0085 } 0086 0087 barcode->setData(data); 0088 QImage result = barcode->toImage(QSizeF(intsize, intsize)); 0089 QImageWriter w(outputfile, outputformat.toLocal8Bit()); 0090 if (!w.write(result)) { 0091 error(QStringLiteral("writing failed"), w.errorString()); 0092 } 0093 return EXIT_SUCCESS; 0094 }