# PHP avatar library The PHP library provides an API identical to the [JavaScript library](https://www.dicebear.com/how-to-use/js-library/). It requires PHP 8.2 or higher. The same seed and style definition produce SVGs byte-identical to the JavaScript reference. ## Installation You need two packages: the core library `dicebear/core` and the avatar style definitions `dicebear/styles`. ``` composer require dicebear/core dicebear/styles ``` ## Usage ```php 'Alice', // ... other options ]); $svg = (string) $avatar; ``` Each avatar style comes with several options. You can find them on the details page of each [avatar style](https://www.dicebear.com/styles/). > [!NOTE] > We provide a large number of avatar styles from different creators. The avatar > styles are licensed under different licenses that the creators can choose > themselves. For a quick overview we have created a > [license overview](https://www.dicebear.com/licenses/) for you. ## Deterministic avatars The `seed` option is the key to generating deterministic avatars. The same seed will always produce the same avatar: ```php $avatar1 = new Avatar($style, ['seed' => 'user-123']); $avatar2 = new Avatar($style, ['seed' => 'user-123']); (string) $avatar1 === (string) $avatar2; // true ``` ## Classes ### `Avatar` The main class for generating avatars. Pass a `Style` instance and optional options. ```php use DiceBear\Avatar; $avatar = new Avatar($style, [ // ... options ]); ``` ### `Style` An immutable wrapper around a style definition. Reuse it when generating multiple avatars from the same style. ```php use DiceBear\Style; use DiceBear\Avatar; $style = new Style($definition); $avatar1 = new Avatar($style, ['seed' => 'Alice']); $avatar2 = new Avatar($style, ['seed' => 'Bob']); ``` ### `OptionsDescriptor` Describes all valid options for a given style. Useful for building UIs or validating user input. ```php use DiceBear\Style; use DiceBear\OptionsDescriptor; $descriptor = new OptionsDescriptor(new Style($definition)); $fields = $descriptor->toJSON(); ``` ## Methods ### `__toString()` / `toString()` **Return type:** `string` Returns the avatar as SVG in XML format. The `__toString()` magic method allows using the avatar directly in string contexts. ```php $avatar = new Avatar($style, ['seed' => 'Alice']); $svg = (string) $avatar; // or $svg = $avatar->toString(); ``` ### `toJSON()` **Return type:** `array{svg: string, options: array}` Returns an associative array with the SVG and the resolved options. ```php $avatar = new Avatar($style, ['seed' => 'Alice']); $json = $avatar->toJSON(); // $json['svg'] → '...' // $json['options'] → ['seed' => 'Alice', ...] ``` ### `toDataUri()` **Return type:** `string` Returns the avatar as [data URI](https://en.wikipedia.org/wiki/Data_URI_scheme). ```php $avatar = new Avatar($style, ['seed' => 'Alice']); $dataUri = $avatar->toDataUri(); // Avatar ``` ## Core options These options are the same across every DiceBear core. See [Core options](https://www.dicebear.com/guides/core-options/) for the full reference. Here are the options in PHP syntax: ```php $avatar = new Avatar($style, [ 'seed' => 'Alice', 'flip' => 'horizontal', // 'none', 'horizontal', 'vertical', 'both' 'rotate' => 10, // -360 to 360, or [min, max] range 'scale' => 0.9, // 0 to 10 (1 = original), or [min, max] range 'borderRadius' => 50, // 0-50 (50 = circle) 'size' => 128, 'translateX' => 0, // -1000 to 1000 (percent of canvas width) 'translateY' => 0, // -1000 to 1000 (percent of canvas height) 'idRandomization' => true, 'title' => 'User Avatar', 'fontFamily' => 'Arial', // or ['Arial', 'Helvetica'] 'fontWeight' => 700, // 1-1000 'backgroundColor' => ['#b6e3f4', '#c0aede'], 'backgroundColorFill' => 'solid', // 'solid', 'linear', 'radial' ]); ``` Dynamic component and color options also work the same way. See [Dynamic component options](https://www.dicebear.com/guides/core-options/#dynamic-component-options) for all available patterns. ## Examples ### Avatar with custom background ```php $avatar = new Avatar($style, [ 'seed' => 'Alice', 'backgroundColor' => ['#b6e3f4', '#c0aede', '#d1d4f9'], ]); ``` ### Fixed size avatar ```php $basePath = InstalledVersions::getInstallPath('dicebear/styles'); $style = Style::fromJson(file_get_contents($basePath . '/src/bottts.json')); $avatar = new Avatar($style, [ 'seed' => 'robot-42', 'size' => 128, 'borderRadius' => 50, // circular avatar ]); ``` ### Avatar with transformations ```php $basePath = InstalledVersions::getInstallPath('dicebear/styles'); $style = Style::fromJson(file_get_contents($basePath . '/src/avataaars.json')); $avatar = new Avatar($style, [ 'seed' => 'Jane', 'flip' => 'horizontal', 'rotate' => 10, 'scale' => 0.9, 'translateY' => 5, ]); ``` ### Multiple avatars on the same page When rendering multiple avatars on the same page, use `idRandomization` to prevent SVG ID conflicts: ```php $users = ['alice', 'bob', 'charlie']; $avatars = array_map(function (string $user) use ($style) { return (string) new Avatar($style, [ 'seed' => $user, 'idRandomization' => true, ]); }, $users); ``` ### Weighted variant selection ```php $avatar = new Avatar($style, [ 'seed' => 'Alice', 'topVariant' => ['short01' => 2, 'short02' => 2, 'long01' => 1], ]); ```