5 more advanced GD examples to manipulate images with PHP
Tags: php, beginners, programming, webdev
Published: 2022-10-13 10:57:56

## 1. How to draw pie chart

```php
<?php

$data = [50, 90, 150, 360];

$im = imagecreatetruecolor(400, 300);
$c_black = imageColorAllocate($im, 0,0,0);

foreach ( $data as $i => $v ) {
  $c = imageColorAllocate(
    $im, 46 + $i * 30,204 - $i * 30, 64 + $i * 30
  );
  imagefilledarc(
    $im, 200, 150,
    100 + $i * 10, 100 + $i * 10, $i ? $data[$i-1] : 0,
    $v, $c, IMG_ARC_PIE
  );
}

imagePng($im, '/tmp/image.png');
```

- `$data` - sample data to draw pie chart based on,
- `imagecreatetruecolor` - creates true color GD image object with specified width & height,
- `imageColorAllocate` - creates color object to use for pie (we use $i value to randomize color),
- `imagefilledarc` - draw next pie,
- `200, 150` - pie center coordinates,
- `imagePng` - saves image in PNG format to the given path.

[Open original](https://onelinerhub.com/php-gd/how-to-draw-pie-chart) or [edit on Github](https://github.com/Onelinerhub/onelinerhub/tree/main/php-gd/how-to-draw-pie-chart.md).

## 2. How to flip an image

```php
<?php

$file = '/var/www/examples/heroine.png';
$im = imagecreatefrompng($file);

imageflip( $im, IMG_FLIP_VERTICAL );
imagePng($im, '/tmp/image.png');
```

- `$file` - image to rotate,
- `imagecreatefrompng` - creates GD image object from given PNG image,
- `imageflip` - flips given image in a specified direction,
- `IMG_FLIP_VERTICAL` - flips image vertically, explore other options,
- `imagePng` - saves image in PNG format to the given path.

[Open original](https://onelinerhub.com/php-gd/how-to-flip-an-image) or [edit on Github](https://github.com/Onelinerhub/onelinerhub/tree/main/php-gd/how-to-flip-an-image.md).

## 3. How to get pixel color

```php
$file = '/var/www/examples/heroine.png';
$im = imagecreatefrompng($file);
$c = imagecolorat($im, 100, 100);
list($r, $g, $b) = [($c >> 16) & 0xFF, ($c >> 8) & 0xFF, $c & 0xFF];
```

- `$file` - sample image to work with,
- `imagecreatefrompng` - creates GD image object from given PNG image,
- `imagecolorat` - returns color at a given position as an integer,
- `100, 100` - we're getting color on 100 pixels from top and 100 pixels from left,
- `$r, $g, $b` - variables will contain decoded values for R, G and B color channels.

[Open original](https://onelinerhub.com/php-gd/how-to-get-pixel-color) or [edit on Github](https://github.com/Onelinerhub/onelinerhub/tree/main/php-gd/how-to-get-pixel-color.md).

## 4. How to rotate an image

```php
<?php

$file = '/var/www/examples/heroine.png';
$im = imagecreatefrompng($file);

$c_black = imageColorAllocate($im, 0,0,0);
$imr = imagerotate( $im, 90, $c_black );

imagePng($imr, '/tmp/image.png');
```

- `$file` - image to rotate,
- `imagecreatefrompng` - creates GD image object from given PNG image,
- `imageColorAllocate` - creates color object to later use in image,
- `imagerotate` - rotates given image and returns new gd image object,
- `90` - rotate image by 90 degrees,
- `$c_black` - color to use for background (if necessary),
- `imagePng` - saves image in PNG format to the given path.

[Open original](https://onelinerhub.com/php-gd/how-to-rotate-an-image) or [edit on Github](https://github.com/Onelinerhub/onelinerhub/tree/main/php-gd/how-to-rotate-an-image.md).

## 5. How to set line thickness

```php
<?php

$im = imagecreatetruecolor(400, 300);

$c_black = imageColorAllocate($im, 0,0,0);
$c_green = imageColorAllocate($im, 46,204,64);

for ( $thick = 5; $thick > 0; $thick-- ) {
  imageline($im, 50, 50 + $thick, 350, 250 + $thick, $c_green);
}


imagePng($im, '/tmp/image.png');
```

- `imagecreatetruecolor` - creates true color GD image object with specified width & height,
- `imageColorAllocate` - creates color object to later use in image,
- `imageline` - draws line using given coordinates and color,
- `$thick = 5` - resulting line thickness (5 in our case),
- `imagePng` - saves image in PNG format to the given path.

[Open original](https://onelinerhub.com/php-gd/how-to-set-line-thickness) or [edit on Github](https://github.com/Onelinerhub/onelinerhub/tree/main/php-gd/how-to-set-line-thickness.md).