Identicon
Generate awesome and unique identicons with beautiful colors
Install / Use
/learn @yzalis/IdenticonREADME
Identicon
Generate unique identicon avatars from any string.
Installation
composer require yzalis/identicon
Requirements
- PHP 8.1+
- GD extension (for PNG output) or Imagick extension (optional)
Quick Start
use Yzalis\Identicon\Identicon;
// Generate a data URI for an img tag
$dataUri = Identicon::generate('john@example.com');
echo '<img src="' . $dataUri . '" alt="Avatar" />';
// With custom size
$dataUri = Identicon::generate('john@example.com', 128);
Builder Pattern
For more control, use the fluent builder:
use Yzalis\Identicon\IdenticonBuilder;
$identicon = (new IdenticonBuilder())
->size(256)
->gridSize(7)
->margin(16)
->color('#3498db')
->backgroundColor('#ffffff')
->useSvg()
->build();
$svg = $identicon->getImageData('john@example.com');
$dataUri = $identicon->getImageDataUri('john@example.com');
Configuration Options
Size
// Square image
$builder->size(128); // 128x128 pixels
// Rectangle (if needed)
$builder->dimensions(200, 100);
Grid Size
The grid determines the pattern complexity (default: 5x5).
$builder->gridSize(7); // 7x7 grid
// Auto-calculate based on image size
$builder->size(1024)->autoGridSize(); // ~17x17 grid
Margins
// Uniform margin
$builder->margin(16); // 16px all sides
// Percentage margin
$builder->marginPercent(10); // 10% of image size
// Per-side margin
$builder->margin([10, 20, 10, 20]); // top, right, bottom, left
Colors
// Hex colors
$builder->color('#3498db');
$builder->color('fff'); // Short format
// RGB array
$builder->color([52, 152, 219]);
// Background
$builder->backgroundColor('#ffffff');
$builder->backgroundColor(null); // Transparent (default)
Renderers
$builder->useSvg(); // SVG (vector, no extension needed)
$builder->useGd(); // PNG via GD (default)
$builder->useImageMagick(); // PNG via ImageMagick
Hash Algorithms
$builder->useSha256(); // Default, better distribution
$builder->useMd5(); // For v2 compatibility
Pre-computed Hashes (GDPR Compliance)
If you already have pre-computed hashes (e.g., for GDPR compliance where emails are stored as hashes), you can generate identicons directly from those hashes without re-hashing:
// Database stores hashed emails for privacy (GDPR)
$storedHash = 'acbd18db4cc2f85cedef654fccc4a4d8'; // MD5 of user email
$identicon = (new IdenticonBuilder())
->skipHashing() // Use input directly as hash
->useSvg()
->build();
$avatar = $identicon->getImageDataUri($storedHash);
This ensures consistency: generating an identicon from "john@example.com" with
MD5 hashing produces the same result as generating from its pre-computed MD5 hash
with skipHashing() enabled.
// These produce identical identicons:
$email = 'john@example.com';
$hash = md5($email);
// Method 1: Hash the email
$id1 = (new IdenticonBuilder())->useMd5()->build();
$avatar1 = $id1->getImageData($email);
// Method 2: Use pre-computed hash directly
$id2 = (new IdenticonBuilder())->skipHashing()->build();
$avatar2 = $id2->getImageData($hash);
// $avatar1 === $avatar2
Output Methods
$identicon = (new IdenticonBuilder())->build();
// Get binary image data
$data = $identicon->getImageData('email@example.com');
// Get base64 data URI (for img src)
$dataUri = $identicon->getImageDataUri('email@example.com');
// Get raw base64 string
$base64 = $identicon->getImageBase64('email@example.com');
// Output directly to browser
$identicon->displayImage('email@example.com');
// Save to file
$identicon->saveToFile('email@example.com', '/path/to/avatar.png');
// Get the generated color
$color = $identicon->getColor('email@example.com');
echo $color->toHex(); // #3498db
v2 Compatibility
If you're upgrading from v2 and need to keep the same identicons:
$identicon = (new IdenticonBuilder())
->useV2Compatibility()
->build();
This activates:
- MD5 hashing (instead of SHA-256)
- Legacy color extraction algorithm
- 5x5 grid
See UPGRADE-3.0.md for full migration guide.
Advanced Usage
Custom Algorithms
use Yzalis\Identicon\Algorithm\HashAlgorithmInterface;
use Yzalis\Identicon\Value\Hash;
class MyHashAlgorithm implements HashAlgorithmInterface
{
public function hash(string $input): Hash
{
return new Hash(hash('sha512', $input));
}
public function getName(): string
{
return 'sha512';
}
}
$identicon = (new IdenticonBuilder())
->hashAlgorithm(new MyHashAlgorithm())
->build();
Custom Renderers
use Yzalis\Identicon\Renderer\RendererInterface;
class WebPRenderer implements RendererInterface
{
// Implement render(), getMimeType(), getFileExtension(), isAvailable()
}
$identicon = (new IdenticonBuilder())
->renderer(new WebPRenderer())
->build();
Testing
composer install
composer test
Static Analysis
composer analyze
Code Style
composer cs # Check
composer cs:fix # Fix
License
MIT License. See LICENSE for details.
Credits
- Benjamin Laugueux benjamin@laugueux.org
- All contributors
Inspired by GitHub's blog post about identicons.
Related Skills
node-connect
343.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
90.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
343.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
