Prepared functions for simple and libravatar-style identicons.
This commit is contained in:
parent
aaece0eabc
commit
c94fc018eb
|
@ -7,6 +7,7 @@
|
||||||
#include "identiconpp.hpp"
|
#include "identiconpp.hpp"
|
||||||
|
|
||||||
using std::cout;
|
using std::cout;
|
||||||
|
using std::endl;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
|
@ -28,6 +29,6 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
Identiconpp identicon(5, 5, 0xffffffff, { 0x000000ff, 0x000000 });
|
Identiconpp identicon(5, 5, 0xffffffff, { 0x000000ff, 0x000000 });
|
||||||
|
identicon.generate("testtest", Identiconpp::identicon_type::simple);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,3 +29,43 @@ Identiconpp::Identiconpp(const uint8_t rows, const uint8_t columns,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Identiconpp::Image Identiconpp::generate(const string &digest,
|
||||||
|
identicon_type type)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case identicon_type::simple:
|
||||||
|
{
|
||||||
|
return generate_simple(digest);
|
||||||
|
}
|
||||||
|
case identicon_type::libravatar:
|
||||||
|
case identicon_type::sigil:
|
||||||
|
{
|
||||||
|
return generate_libravatar(digest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Identiconpp::Image Identiconpp::generate_simple(const string &digest)
|
||||||
|
{
|
||||||
|
return { 1, Magick::Image() };
|
||||||
|
}
|
||||||
|
|
||||||
|
Identiconpp::Image Identiconpp::generate_libravatar(const string &digest)
|
||||||
|
{
|
||||||
|
uint8_t entropy_provided = digest.length() / 2 * 8;
|
||||||
|
uint8_t entropy_required = (_columns / 2 + _columns % 2) * _rows + 8;
|
||||||
|
ttdebug << "entropy_provided=" << std::to_string(entropy_provided)
|
||||||
|
<< ", entropy_required=" << std::to_string(entropy_required) << '\n';
|
||||||
|
|
||||||
|
if (entropy_provided < entropy_required)
|
||||||
|
{
|
||||||
|
throw std::invalid_argument(
|
||||||
|
"Passed digest \"" + digest + "\" is not capable of providing " +
|
||||||
|
std::to_string(entropy_required) + " bits of entropy.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: implement
|
||||||
|
|
||||||
|
return { 1, Magick::Image() };
|
||||||
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <tuple>
|
||||||
|
#include <Magick++/Image.h>
|
||||||
|
|
||||||
using std::uint8_t;
|
using std::uint8_t;
|
||||||
using std::uint32_t;
|
using std::uint32_t;
|
||||||
|
@ -31,12 +33,32 @@ using std::vector;
|
||||||
class Identiconpp
|
class Identiconpp
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/*!
|
||||||
|
* @brief Return type for images.
|
||||||
|
*/
|
||||||
|
struct Image
|
||||||
|
{
|
||||||
|
uint8_t error;
|
||||||
|
Magick::Image data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief List of identicon types
|
||||||
|
*
|
||||||
|
* libravatar and sigil are synonymous.
|
||||||
|
*/
|
||||||
|
enum class identicon_type
|
||||||
|
{
|
||||||
|
simple,
|
||||||
|
libravatar,
|
||||||
|
sigil
|
||||||
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Initialises an instance of Identiconpp.
|
* @brief Initialises an instance of Identiconpp.
|
||||||
*
|
*
|
||||||
* The instance can be used for creating identicons with differing
|
* The instance can be used for creating identicons with differing
|
||||||
* image formats and sizes. Will throw `std::invalid_argument` if
|
* image formats and sizes.
|
||||||
* an argument is invalid.
|
|
||||||
*
|
*
|
||||||
* @param rows Number of rows
|
* @param rows Number of rows
|
||||||
* @param columns Number of columns
|
* @param columns Number of columns
|
||||||
|
@ -47,9 +69,36 @@ public:
|
||||||
const uint32_t background = 0xffffffff,
|
const uint32_t background = 0xffffffff,
|
||||||
const vector<uint32_t> &foreground = { 0x000000ff } );
|
const vector<uint32_t> &foreground = { 0x000000ff } );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Generates identicon from digest.
|
||||||
|
*
|
||||||
|
* @param digest The pre-computed digest
|
||||||
|
*
|
||||||
|
* @return 0 and an image on success, 1 and an empty image on error.
|
||||||
|
*/
|
||||||
|
Image generate(const string &digest, identicon_type type);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const uint8_t _rows;
|
const uint8_t _rows;
|
||||||
const uint8_t _columns;
|
const uint8_t _columns;
|
||||||
const uint32_t _background;
|
const uint32_t _background;
|
||||||
const vector<uint32_t> _foreground;
|
const vector<uint32_t> _foreground;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Generate simple identicon.
|
||||||
|
*
|
||||||
|
* @param digest The pre-computed digest
|
||||||
|
*
|
||||||
|
* @return 0 and an image on success, 1 and an empty image on error.
|
||||||
|
*/
|
||||||
|
Image generate_simple(const string &digest);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Generate libravatar-style identicon.
|
||||||
|
*
|
||||||
|
* @param digest The pre-computed digest
|
||||||
|
*
|
||||||
|
* @return 0 and an image on success, 1 and an empty image on error.
|
||||||
|
*/
|
||||||
|
Image generate_libravatar(const string &digest);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user