Giter Site home page Giter Site logo

lasserafn / php-initial-avatar-generator Goto Github PK

View Code? Open in Web Editor NEW
406.0 15.0 59.0 41.54 MB

Generate avatars with initials from user names.

License: MIT License

PHP 100.00%
php intervention image generator avatar avatar-generator profile-picture php7 php8

php-initial-avatar-generator's Introduction

Generate avatars with initials

Ever seen those avatars (basically everywhere) that has your initials — mine would be LR; Lasse Rafn — well this package allows you to generate those, in a simple manner.

Banner

Build Status OtterWise Coverage StyleCI Status Total Downloads Latest Stable Version License

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

There's also a api you can use: https://ui-avatars.com

Installation

You just require using composer and you're good to go!

composer require lasserafn/php-initial-avatar-generator

Rad, and long, package name.. huh? Sorry. I'm not very good with names.

Usage

As with installation, usage is quite simple. Generating a image is done by running:

$avatar = new LasseRafn\InitialAvatarGenerator\InitialAvatar();

$image = $avatar->name('Lasse Rafn')->generate();

Thats it! The method will return a instance of Image from Intervention so you can stream, download or even encode the image:

return $image->stream('png', 100);

You can also just pass along the initials, and it will use those. Should you just include a first name, it will use the first two letters of it.

SVG generation

$avatar = new LasseRafn\InitialAvatarGenerator\InitialAvatar();

echo $avatar->name('Lasse Rafn')->generateSvg()->toXMLString(); // returns SVG XML string

Supported methods and parameters

Of cause, passing a name is not the only thing this sweet thing does!

Name (initials) - default: JD

$image = $avatar->name('Albert Magnum')->generate();

AutoFont - default: false

Will detect language script (using lasserafn/php-string-script-language) and use a font that supports it.

$image = $avatar->autoFont()->generate();

Width - default: 48

// will be 96 pixels wide.
$image = $avatar->width(96)->generate();

Height - default: 48

// will be 96 pixels tall.
$image = $avatar->height(96)->generate();

Size - default: 48 (proxy for $avatar->width(X)->height(X))

// will be 96x96 pixels.
$image = $avatar->size(96)->generate();

Background color - default: #f0e9e9

// will be red
$image = $avatar->background('#ff0000')->generate();

Font color - default: #8b5d5d

// will be red
$image = $avatar->color('#ff0000')->generate();

Auto Color

// Will choose a background color based on `name` and a contrasting font color. The color for a specific name will always be the same.
$image = $avatar->autoColor()->generate();

Font file - default: /fonts/OpenSans-Regular.ttf

Two fonts with two variants are included:

  • /fonts/OpenSans-Regular.ttf
  • /fonts/OpenSans-Semibold.ttf
  • /fonts/NotoSans-Bold.ttf
  • /fonts/NotoSans-Regular.ttf

The method will look for the font, if none found it will append __DIR__ and try again, and if not it will default to the first GD Internal Font. If you input an integer between 1 and 5, it will use a GD Internal font as per that number.

// will be Semibold
$image = $avatar->font('/fonts/OpenSans-Semibold.ttf')->generate();

Font name (for SVGs) - default: Open Sans, sans-serif

$image = $avatar->fontName('Arial, Helvetica, sans-serif')->generate();

Length - default: 2

$image = $avatar->name('John Doe Johnson')->length(3)->generate(); // 3 letters = JDJ

Switching driver - default: gd

$image = $avatar->gd()->generate(); // Uses GD driver
$image = $avatar->imagick()->generate(); // Uses Imagick driver

Rounded - default: false

$image = $avatar->rounded()->generate();

Smooth - default: false

Makes rounding smoother with a resizing hack. Could be slower.

$image = $avatar->rounded()->smooth()->generate();

If you are going to use rounded(), you want to use smooth() to avoid pixelated edges. Disabled by default because it COULD be slower. I would recommend just rounding with CSS.

Font Size - default: 0.5

$image = $avatar->fontSize(0.25)->generate(); // Font will be 25% of image size.

If the Image size is 50px and fontSize is 0.5, the font size will be 25px.

Chaining it all together

We will not use the ->font() method in this example; as I like the regular one.

return $avatar->name('Lasse Rafn')
              ->length(2)
              ->fontSize(0.5)
              ->size(96) // 48 * 2
              ->background('#8BC34A')
              ->color('#fff')
              ->generate()
              ->stream('png', 100);

Now, using that in a image (sized 48x48 pixels for retina):

<img src="url-for-avatar-generation" width="48" height="48" style="border-radius: 100%" />

Will yield:

Result

Rounded for appearance; the actual avatar is a filled square

Font Awesome Support

The package supports FontAwesome (v5) and already distributes the free version as otf format (see /fonts folder).

However, when using FontAwesome you may want to display one specific icon instead of the user's initials. This package, therefore, provides a handy glyph($code) method to be used along with FontAwesome.

First, you need to "find" the respective unicode for the glyph you want to insert. For example, you may want to display a typical "user" icon (unicode: f007). The unicode is located near the name of the icon (e.g., see here the user icon as an example here: https://fontawesome.com/icons/user ).

An example for rendering a red avatar with a white "user" glyph would look like this:

// note that we
// 1) use glyph() instead of name
// 2) change the font to FontAwesome!
return $avatar->glyph('f007')
              ->font('/fonts/FontAwesome5Free-Regular-400.otf')
              ->color('#fff')
              ->background('#ff0000')
              ->generate()
              ->stream('png', 100);

Requirements

  • PHP +7.0
  • Fileinfo Extension (from intervention/image)

Script/Language support

Some letters are not supported by the default font files, so I added some fonts to add support. You must use autoFont() to enable this feature. Supported are:

  • Arabic
  • Armenian
  • Bengali
  • Georgian
  • Hebrew
  • Mongolian
  • Chinese
  • Thai
  • Tibetan

Open Source is best when supported by a community. Any size of contribution is very appreciated.

Supported Image Libraries (from intervention/image)

  • GD Library (>=2.0)
  • Imagick PHP extension (>=6.5.7)

php-initial-avatar-generator's People

Contributors

bcmcq avatar johannesschobel avatar lasserafn avatar lesuisse avatar peter279k avatar psohm avatar stylecibot avatar yakatz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

php-initial-avatar-generator's Issues

Result output

Hello,

$resim = $avatar->name('Lasse Rafn')
		->length(2)
		->fontSize(0.5)
		->size(96)// 48 * 2
		->background('#8BC34A')
		->color('#fff')
		->generate()
		->stream('png', 100);
	echo '<img src="' . $resim . '" width="48" height="48" style="border-radius: 100%" />';

Result:

<img src="�PNG � IHDR00��W�����IDATh��=��@�������� i���"�),�X������R�����"����R�2��"������D삤�s�]؏�qd�.��S��y9O ���@��H��x�!��!��!��!��!��!��!����\���A��P�������� ��y��fh�ۈD"L����K�C���p�\�,CQ��R)��i���l6��rɜOa��DD��z�����Q�Z�kOUU�L&DD���C����� ��GT�\�Wh��d2ɔ��#�������S��.�( ��<��\������8n��V��S���$IB,�C�^�t:�$I�,����9�w���n����;�z���l68�N��3� $IB.���px9��s��m""���/�}���m�|>�X,�0��������f� ��z�e�9�[��������4 �e1�p���i��x��j1Ob�.������?���.��A���b��h�Z��N��r��t-L���}���F��j4�(� (�J0 ���>u�����_�o�o�o�o�o�o���'#+X����{IEND�B`�"/>

What cloud be reason for this?

Thank you?

PHP 8 Support

main package lasserafn/php-initial-avatar-generator supports php8 as well, but
lasserafn/php-initials required 7.1+, it would be nice to support PHP 8.0 completely.

Installation failed

Beacause
Problem 1
- Installation request for rackbeat/laravel-ui-avatars ^0.7.0 -> satisfiable by rackbeat/laravel-ui-avatars[0.7].
- Conclusion: remove lasserafn/php-initial-avatar-generator 4.0.2
- Conclusion: don't install lasserafn/php-initial-avatar-generator 4.0.2
- rackbeat/laravel-ui-avatars 0.7 requires lasserafn/php-initial-avatar-generator ^3.0 -> satisfiable by lasserafn/php-initial-avatar-generator[3.0.0, 3.0.1, 3.0.2, 3.0.3].
- Can only install one of: lasserafn/php-initial-avatar-generator[3.0.0, 4.0.2].
- Can only install one of: lasserafn/php-initial-avatar-generator[3.0.1, 4.0.2].
- Can only install one of: lasserafn/php-initial-avatar-generator[3.0.2, 4.0.2].
- Can only install one of: lasserafn/php-initial-avatar-generator[3.0.3, 4.0.2].
- Installation request for lasserafn/php-initial-avatar-generator (locked at 4.0.2) -> satisfiable by lasserafn/php-initial-avatar-generator[4.0.2].

Wordpress Plugin

Hi There,

Would you be interested in turning this into a Wordpress Plugin for generating a custom default avatar for comments? I would be very keen to use something like that. The idea would be to use their gravatar by default, but if they didn't have one, then fall back to this library to generate an image with their initials and a random color. You've done all the hard work so turning into a plugin would be pretty straightforward.

Cheers
Abe

Set image height

Hi. How I can set image height on avatar generation? I need render image: 520x360

generate random color

Hi Lasse, thank you for this pacakge.

Lately, I used this package for my project. I needed to generate a random color for each user. here is my commit if you find it useful let me know to send you a PR.

Thanks

FontAwesome only user icon works

Hey,

Two quick questions:

  1. How do I load a custom font?
    Running on Laravel here and generating them (not for users). Any hints? I've tried the resource_path() and the asset() without any luck.

  2. FontAwesome not all icons are supported, I've tried multiple but only seem to ge the user to work. In the example below this should render the question mark.

$image = $avatar->glyph('f128')
                ->font('/fonts/FontAwesome5Free-Regular-400.otf')
                ->size(500)
                ->rounded()
                ->background('#e9655b')
                ->color('#ffffff')
                ->generate();

           return response($image->stream('png', 100))
                ->header('Content-Type','image/png')
                ->header('Pragma','public')
                ->header('Content-Disposition','inline; filename="1231231231231.png"')
                ->header('Cache-Control','max-age=60, must-revalidate');

Broken Return

return $avatar->name('Lasse Rafn')
              ->length(2)
              ->fontSize(0.5)
              ->size(96) // 48 * 2
              ->background('#8BC34A')
              ->color('#fff')
              ->cache()
              ->generate()
              ->stream('png', 100);

this is output showing up http://prntscr.com/hnahzh

Deprecation Notice: Dynamic property creation in InitialAvatar.php with php 8.2

Hello,

I've been using your PHP Initial Avatar Generator library and it has been very helpful. However, I've encountered a deprecation notice with a recent version of PHP. Here's the notice:

Deprecated: Creation of dynamic property LasseRafn\InitialAvatarGenerator\InitialAvatar::$translato is deprecated in /srv/api/vendor/lasserafn/php-initial-avatar-generator/src/InitialAvatar.php on line 571

Would it be possible to update the code to avoid the use of dynamic properties and thus resolve this deprecation notice?

Thanks for your attention to this matter. I appreciate your work on this library and look forward to your response.

[FEAT] Emoji/emoticon support

Hi,

This is probably a bit involved, but I would like the ability to pass emoji into the generator (maybe limit to 1 due to shape?)

Currently, it will generate something like:
image

Instead of 🇹🇬

[Regression] SVGs not resizing in IE11

We generate SVG avatars with a single size in the backend, and then use width and height attributes of the img tag to size them as-needed on the frontend. On the latest release, this works fine in all oses/browsers except for Internet Explorer 11.

bad example 100x100

bad example 52x49

When we downgrade to 4.1.1, they look (somewhat) as expected in IE 11

good example 100x100

good example 52x49

To be clear, they don't look great in IE 11, but at least they're readable 😂

We are okay to stay on version 4.1.1 for the time being, as our use-case doesn't expose the Firefox bug that was fixed in 4.1.2. But, since our team is committed to IE 11 support throughout its remaining support lifespan, it would be nice to see this addressed somehow in the library.

It looks like adding the viewBox attribute to the root SVG element would potentially fix the issue. So perhaps it could be added internally upon generation?

Thanks!

Just wanted to say thanks for this awesome package, works great! :)

Laravel use

Hello, can you please offer up guidance on how to use your library for laravel?

What provider to i register and what use string do i use?

Thank you very much.

No way to use Imagick as driver?

Hi, from the README:

Supported Image Libraries (from intervention/image)

GD Library (>=2.0)
Imagick PHP extension (>=6.5.7)

But there's no way to specify to use Imagick? It uses GD by default, because that's Intervention's default.

As a solution I think it would be a good option to allow an user to inject their own Intervention\Image\ImageManager + be able to set one as a default (via a static method call).

Another thing: I wanted to extend your class, but that's next to impossible due to all the private members. Perhaps you can consider using protected visibility (wherever possible)?

Cheers ;-)

UTF-8 characters?

Does it supports with utf8 like japanese name or something similar?

Document use-case against CSS

Hello! Nice repo :)
What do you think is the main use-case to prefer static images against HTML elements with CSS applied?

SVG support ?

Is it possible to add SVG support ? SVG is much better for this kind of pictures !

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.