{"id":21215284,"url":"https://github.com/jonasdoesthings/plavatar","last_synced_at":"2025-07-10T11:31:19.713Z","repository":{"id":87021703,"uuid":"374998862","full_name":"JonasDoesThings/plavatar","owner":"JonasDoesThings","description":"placeholder + avatar = plavatar - a go library","archived":false,"fork":false,"pushed_at":"2024-07-10T19:02:06.000Z","size":591,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-10T22:46:45.681Z","etag":null,"topics":["avatar","avatar-generator","go","golang","golang-library","hacktoberfest","placeholder","placeholder-image"],"latest_commit_sha":null,"homepage":"https://pkg.go.dev/github.com/jonasdoesthings/plavatar/v3","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JonasDoesThings.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"buy_me_a_coffee":"jonasdoesthings"}},"created_at":"2021-06-08T12:20:34.000Z","updated_at":"2024-07-10T19:01:42.000Z","dependencies_parsed_at":"2024-04-24T20:31:30.572Z","dependency_job_id":"0bac5f02-f74d-455d-a878-860fcf34aab9","html_url":"https://github.com/JonasDoesThings/plavatar","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonasDoesThings%2Fplavatar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonasDoesThings%2Fplavatar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonasDoesThings%2Fplavatar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonasDoesThings%2Fplavatar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JonasDoesThings","download_url":"https://codeload.github.com/JonasDoesThings/plavatar/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225634035,"owners_count":17500086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["avatar","avatar-generator","go","golang","golang-library","hacktoberfest","placeholder","placeholder-image"],"created_at":"2024-11-20T21:36:35.478Z","updated_at":"2024-11-20T21:36:36.109Z","avatar_url":"https://github.com/JonasDoesThings.png","language":"Go","funding_links":["https://buymeacoffee.com/jonasdoesthings","https://www.buymeacoffee.com/JonasDoesThings"],"categories":[],"sub_categories":[],"readme":"# plavatar\nA library for generating **pla**ceholder **avatar**s (=plavatars).\n\n`plavatar`: A library for generating **pla**ceholder **avatar**s (=plavatars).  \n`plavatar-rest` A stateless REST microservice wrapping plavatar for you (docker image available) (https://github.com/jonasdoesthings/plavatar-rest)\n\n![docs/assets/readme-demo.png](docs/assets/readme-demo.png)\n\n## Install\n`go get github.com/jonasdoesthings/plavatar/v3`  \nThen you can import the `\"github.com/jonasdoesthings/plavatar/v3\"` package.\n\n## Usage\nFull Docs: https://pkg.go.dev/github.com/jonasdoesthings/plavatar/v3\n\nBasic Example with a built-in generatorFunc:\n```go\nimport (\n    \"bytes\"\n    \"github.com/jonasdoesthings/plavatar/v3\"\n)\n\nfunc generateMyAvatar() (*bytes.Buffer, string) {\n    // Set-up a plavatar Generator instance\n    avatarGenerator := plavatar.Generator{}\n    \n    // Configure the plavatar you want to generate \n    options := \u0026plavatar.Options{\n        Name:         \"exampleSeed\", // the seed to use\n        OutputShape:  plavatar.ShapeSquare, // ShapeSquare or ShapeCircle\n        OutputFormat: plavatar.FormatSVG,\n        // OR if you want a PNG with the size of 512x512px:\n        // OutputFormat: plavatar.FormatPNG,\n        // OutputSize: 512,\n    }\n    \n    // generate the avatar using the built-in Smiley generatorFunc and pass the options from above\n    avatar, rngSeed, err := avatarGenerator.GenerateAvatar(avatarGenerator.Smiley, options)\n    if err != nil {\n        panic(err)\n    }\n\n    // returns the avatar as *bytes.Buffer and the used rngSeed as string\n    return avatar, rngSeed\n}\n```\n\nThe plavatar Generator uses a passed generatorFunc to generate the avatar graphic.\nThe generatorFunc takes a svg canvas, a rng, the used rngSeed, and the generation options.\nThe generatorFunc then modifies the passed svg canvas.\n\nBasic example with a custom generatorFunc:\n```go\nimport (\n    \"bytes\"\n    svg \"github.com/ajstarks/svgo\"\n    \"github.com/jonasdoesthings/plavatar/v3\"\n    \"math/rand\"\n)\n\nfunc CustomAvatar(canvas *svg.SVG, rng *rand.Rand, rngSeed int64, options *plavatar.Options) {\n    canvas.Def()\n    gradientColors := []svg.Offcolor{{0, \"#FF0000\", 1}}\n    canvas.LinearGradient(\"bg\", 0, 0, 100, 100, gradientColors)\n    canvas.DefEnd()\n\n    plavatar.DrawCanvasBackground(canvas, options)\n    canvas.Line(-100, -10, 100, 10, \"stroke: white; stroke-width: 23\")\n}\n\nfunc generateMyCustomAvatar() (*bytes.Buffer, string) {\n    avatarGenerator := plavatar.Generator{}\n    options := \u0026plavatar.Options{\n        Name:         \"exampleSeed\",\n        OutputFormat: plavatar.FormatSVG,\n        OutputShape:  plavatar.ShapeSquare,\n    }\n    avatar, rngSeed, err := avatarGenerator.GenerateAvatar(CustomAvatar, options)\n    if err != nil {\n        panic(err)\n    }\n\n    return avatar, rngSeed\n}\n```\n\n## **If possible, use format=SVG.**\nNot only is format=SVG extremely faster, if you transfer the image to your user, SVG also saves you a lot of bandwidth and latency (A generated SVG is only ~2% the size of a 512px PNG)\n\n## Testing\nTo run the go tests, use `go test -v ./...` in the root directory of the project.\n\n## Support my work\n\u003ca href=\"https://www.buymeacoffee.com/JonasDoesThings\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/default-orange.png\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\"\u003e\u003c/a\u003e  \n\nIf this library helps you, you can use https://www.buymeacoffee.com/JonasDoesThings to support my work.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonasdoesthings%2Fplavatar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonasdoesthings%2Fplavatar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonasdoesthings%2Fplavatar/lists"}