https://github.com/badges/svg-to-image-proxy
Web function to generate PNGs from SVGs
https://github.com/badges/svg-to-image-proxy
image png proxy rasterizer svg
Last synced: about 1 year ago
JSON representation
Web function to generate PNGs from SVGs
- Host: GitHub
- URL: https://github.com/badges/svg-to-image-proxy
- Owner: badges
- License: mit
- Archived: true
- Created: 2019-03-03T23:49:29.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-02-05T15:39:22.000Z (over 3 years ago)
- Last Synced: 2024-07-31T20:28:26.649Z (almost 2 years ago)
- Topics: image, png, proxy, rasterizer, svg
- Language: JavaScript
- Homepage: https://raster.shields.io/badge/foo-bar-blue.png
- Size: 641 KB
- Stars: 17
- Watchers: 7
- Forks: 5
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-badges - svg-to-image-proxy
README
# svg-to-image-proxy
## ⚠️ Deprecated
This package is now deprecated and archived. Shields.io has migrated to [squint](https://github.com/badges/squint/) for SVG to PNG conversion.
---
[][opencollective]
[][discord]
[][npm]
[][npm]
[][build]
[][prettier]
[opencollective]: https://opencollective.com/shields
[npm]: https://npmjs.com/svg-to-image-proxy
[build]: https://circleci.com/gh/badges/svg-to-image-proxy/tree/master
[prettier]: https://prettier.io/
[discord]: https://discordapp.com/invite/HjJCwm5
Web function to generate PNGs from SVGs. Based on [convert-svg-to-png][]
which uses headless Chromium.
The proxy accepts a request for e.g. `https://raster.example.com/example.png`
and translates it to a request for
`https://other-server.example.com/example.svg`. If the path doesn't contain
`.png`, it passes is unchanged, e.g. `https://raster.example.com/example` to
`https://other-server.example.com/example`.
The query string is also forwarded upstream. Cache headers are forwarded downstream.
The host comes from the `BASE_URL` environment variable.
Designed for [Shields][] though may be useful for other application as well.
[shields]: https://github.com/badges/shields
[convert-svg-to-png]: https://www.npmjs.com/package/convert-svg-to-png
## Architecture
- The code is is [one file][].
- It's based on the [Micro][] framework.
- Rasterization uses headless Chromium via [Puppeteer][], wrapped in the
[convert-svg-to-png][] library.
- The service has no state. It simply fetches corresponding SVG badges from the
upstream service, rasterizes them, and forwards cache headers along with the
response.
- Caching the rasterized badges is handled by a downstream CDN.
[one file]: https://github.com/badges/svg-to-image-proxy/blob/master/rasterize.js
[micro]: https://github.com/zeit/micro
[puppeteer]: https://pptr.dev/
## Deployment
Runs on Zeit Now.
## raster.shields.io production hosting
Staging: https://shields-raster-staging.now.sh/
Production: https://raster.shields.io/
`raster.shields.io` hosting is provided by:
- [Zeit Now][zeit now]
- [Zeit Smart CDN][cdn]
- [Now for GitHub][]
Pull requests are deployed automatically. Staging is deployed automatically
from master. Production is deployed manually for now.
For information about current deploys, see the [Now dashboard][]. See [production hosting][]
for a list of maintainers with access.
`raster.shields.io` is configured in the Shields Cloudflare as a CNAME for
`alias.zeit.co` with traffic configured not to pass through Cloudflare. That's
because it's cached by [Now's Smart CDN][cdn] instead.
### Production Deployment
To deploy, run `now alias shields-raster-staging.now.sh raster.shields.io`.
This ships the current staging build to production.
To setup your environment to run `now`, you'll need to install the CLI, login, and switch to the Shields team.
```bash
npm i -g now
now login
now teams switch shields1
```
[zeit now]: https://zeit.co/now
[cdn]: https://zeit.co/smart-cdn
[now for github]: https://zeit.co/github
[now dashboard]: https://zeit.co/shields1/svg-to-image-proxy
[production hosting]: https://github.com/badges/shields/blob/master/doc/production-hosting.md
## Support
If you're having problems with the service, you can post questions in the
[`#support` room in Discord][discord] and [the main Shields repo][new issue].
## Contributing
If you use and love Shields, we ask that you
[make a one-time \$10 donation to Shields][opencollective]. You can also
contribute monthly or sponsor at a higher level.
Contributions welcome! Feel free to
[open discussions on the main Shields repo][new issue] and to open pull requests here.
The [`#contributing` room in Discord][discord] is also a good place to discuss and ask
questions.
[new issue]: https://github.com/badges/shields/issues/new/choose
## License
This project is licensed under the MIT license.