Skip to content

crazko/post-social-image

Repository files navigation

Example Image

A simple command line tool to generate images suitable for sharing on social media sites.

Travis (.org)

Installation

composer require crazko/post-social-images

Usage

<?php

use Crazko\PostSocialImage\Image;
use Crazko\PostSocialImage\Position;

$title = 'My amazing post';

$image = new Image(1600, '#1E9682', '/ubuntu.ttf', 80);
$image->text($title, 120, '#E6FAFF'); // First text is always wrapped and centered
$image->text('example.com', 25, '#33F88A', Position::BOTTOM | Position::RIGHT);

// More texts can be placed into image
$image->text('John Doe', 50, '#660012', Position::TOP | Position::LEFT);

$path = $image->save($title, './assests/img'); // ./assets/img/my-amazing-post.png

Example Image

API

new Image(int $width, string $background, string $font, int $padding)

Creates new Image instance.

  • $width - width of the image in px, height is calculated proportionaly 16:9
  • $background - HEX color of the image background, e.g.: ff8800 or #ff8800
  • $fontPath - path to the font used in the image
  • $padding - free space around the image in px

Image::text(string $text, int $size, string $color, ?int $position = null)

Adds text to the image. Can be used multiple times. First one is always centered, wrapped when the text is too long and resized to always fit the image - considered as a main title.

  • $text - given text
  • $size - size of the text in px
  • $color - HEX color of the text, e.g.: ff8800 or #ff8800
  • $position - position of the text in the image, use combination of Position::TOP, Position::BOTTOM, Position::LEFT, Position::RIGHT, e.g.: Position::TOP | Position::RIGHT

Image::save(string $name, string $destination)

Saves generated image to the $destination with given (webalized) $name and returns resulting path.

Image::get()

Returns generated image.

CLI

vendor/bin/create-image -o example.com ./assets/img "My amazing post"

Resulting success message:

Image was created in ./assets/img/my-amazing-post.png

Composer command

You can also define a new command in your composer.json to avoid constantly typing every option:

{
    "scripts": {
        "image": "vendor/bin/create-image --ansi -b E6FAFF -f 1E9682 -c E1738A -o example.com ./assets/img"
    },
}

and use it to create new images more easily:

composer image "My amazing post"

Available options

Type vendor/bin/create-image --help to see all available options.

Description:
  Creates a new social image.

Usage:
  create [options] [--] <destination> <title>

Arguments:
  destination                            Where to save the image?
  title                                  Title of the post the image should be generated for.

Options:
  -w, --width=WIDTH                      The width of the image in px. Height is calculated proportionaly 16:9. [default: 1200]
  -p, --padding=PADDING                  The padding of the image in px. [default: 50]
  -s, --size=SIZE                        The size of the image title in px. [default: 100]
  -b, --colorBackground=COLORBACKGROUND  HEX color of the title. [default: "ffffff"]
  -f, --colorForeground=COLORFOREGROUND  HEX color of the image background. [default: "000000"]
  -o, --origin=ORIGIN                    E.g. your name or the name of your blog.
  -c, --colorOrigin=COLORORIGIN          HEX color of the origin. [default: "000000"]
  -h, --help                             Display this help message
  -q, --quiet                            Do not output any message
  -V, --version                          Display this application version
      --ansi                             Force ANSI output
      --no-ansi                          Disable ANSI output
  -n, --no-interaction                   Do not ask any interactive question
  -v|vv|vvv, --verbose                   Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
  Creates a new social image with a defined title and optional signature.

Development

Fork and clone the repository, install dependencies.

git clone git@github.com:<your-name>/post-social-images.git
cd post-social-images
composer install

Testing commands:

  • composer ecs - checks coding standards with EasyCodingStandard library
  • composer phpstan - runs static analysis with phpstan
  • composer tester - runs tests from ./tests with nette/tester
  • composer test - runs all above together
  • composer fix - fixes coding standard violations automatically

Tips

How to add image to the site

Add following meta tags to the <head> element of your page:

<meta name="twitter:image" content="/assets/img/my-amazing-post.png">
<meta property="og:image" content="/assets/img/my-amazing-post.png">

All recommended tags:

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:creator" content="@twitter_handle">
<meta name="twitter:title" content="My amazing post">
<meta name="twitter:description" content="My amazing post introduction for visitors and crawlers.">
<meta name="twitter:image" content="/assets/img/my-amazing-post.png">

<meta property="og:type" content="article">
<meta property="og:title" content="My amazing post">
<meta property="og:description" content="My amazing post introduction for visitors and crawlers.">
<meta property="og:url" content="https://example.com/my-amazing-post">
<meta property="og:image" content="/assets/img/my-amazing-post.png">

See The Open Graph protocol and Twitter Cards for more info about other meta tags.

Preview

Try to add your page to the https://metatags.io/ to see how would it look like with your amazing new social image when shared on Facebook, Twitter, Linkedin and others.

About

Creates images suitable for social sharing

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages