diff --git a/docs/API-QROptions.md b/docs/API-QROptions.md
index 5efa1494c..911a1fc98 100644
--- a/docs/API-QROptions.md
+++ b/docs/API-QROptions.md
@@ -57,8 +57,7 @@ Inherited from [`SettingsContainerAbstract`](https://github.com/chillerlan/php-s
| `$scale` | `int` | `5` | * | Pixel size of a QR code module |
| `$imageTransparent` | `bool` | `true` | * | Toggle transparency (no jpeg support), QRGdImage and QRImagick only. The given `QROptions::$transparencyColor` is set as transparent |
| `$transparencyColor` | `mixed` | `null` | a valid GD or Imagick color value | Sets a transparency color for when `QROptions::$imageTransparent` is set to true. Defaults to `QROptions::$bgColor`. |
-| `$pngCompression` | `int` | `-1` | `-1...9` | `imagepng()` compression level, -1 = auto |
-| `$jpegQuality` | `int` | `85` | `0...100` | `imagejpeg()` quality |
+| `$quality` | `int` | `-1` | * | compression quality setting for `imagejpeg()`, `imagepng()`, `imagewebp()`, `Imagick::setImageCompressionQuality()` |
| `$imagickFormat` | `string` | `'png'` | * | ImageMagick output type, see `Imagick::setType()` |
| `$cssClass` | `string` | `'qrcode'` | * | A common css class |
| `$markupDark` | `string` | `'#000'` | * | Markup substitute for dark (CSS value) |
diff --git a/docs/Built-In-Output-QREps.md b/docs/Built-In-Output-QREps.md
index 60485b4b7..9cef1814f 100644
--- a/docs/Built-In-Output-QREps.md
+++ b/docs/Built-In-Output-QREps.md
@@ -1,26 +1,81 @@
# QREps
-[Class `QREps`](https://github.com/chillerlan/php-qrcode/blob/main/src/Output/QREps.php): [Encapsulated Postscript](https://en.wikipedia.org/wiki/Encapsulated_PostScript) (EPS) output
+[Class `QREps`](https://github.com/chillerlan/php-qrcode/blob/main/src/Output/QREps.php): [Encapsulated Postscript](https://en.wikipedia.org/wiki/Encapsulated_PostScript) (EPS) output.
+
+
+## Example
+
+See: [EPS example](https://github.com/chillerlan/php-qrcode/blob/main/examples/eps.php)
+
+Set the options:
+
+```php
+$options = new QROptions;
+
+$options->outputType = QROutputInterface::EPS;
+$options->scale = 5;
+$options->drawLightModules = false;
+// colors can be specified either as [R, G, B] or [C, M, Y, K] (0-255)
+$options->bgColor = [222, 222, 222];
+$options->moduleValues = [
+ QRMatrix::M_FINDER_DARK => [0, 63, 255], // dark (true)
+ QRMatrix::M_FINDER_DOT => [0, 63, 255], // finder dot, dark (true)
+ QRMatrix::M_FINDER => [233, 233, 233], // light (false)
+ QRMatrix::M_ALIGNMENT_DARK => [255, 0, 255],
+ QRMatrix::M_ALIGNMENT => [233, 233, 233],
+ QRMatrix::M_DATA_DARK => [0, 0, 0],
+ QRMatrix::M_DATA => [233, 233, 233],
+];
+```
+
+
+Render and save to file:
+
+```php
+$data = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ';
+$file = __DIR__.'/qrcode.eps';
+
+(new QRCode($options))->render($data, $file);
+```
+
+
+Push as file download in a browser:
+
+```php
+header('Content-type: application/postscript');
+header('Content-Disposition: filename="qrcode.eps"');
+
+echo (new QRCode($options))->render($data);
+
+exit;
+```
+
+## Additional methods
+
+| method | return | description |
+|---------------------------------------------------|----------|--------------------------------------------|
+| (protected) `formatColor(array $values)` | `string` | Set the color format string |
+| (protected) `module(int $x, int $y, int $M_TYPE)` | `string` | Returns a path segment for a single module |
## Options that affect this module
-| property | type |
-|--------------------------------|----------------|
-| `$drawLightModules` | `bool` |
-| `$connectPaths` | `bool` |
-| `$excludeFromConnect` | `array` |
-| `$scale` | `int` |
+| property | type |
+|-----------------------|---------|
+| `$bgColor` | `array` |
+| `$connectPaths` | `bool` |
+| `$drawLightModules` | `bool` |
+| `$excludeFromConnect` | `array` |
+| `$scale` | `int` |
### Options that have no effect
| property | reason |
|------------------------|-----------------|
-| `$returnResource` | N/A |
-| `$imageBase64` | N/A |
-| `$bgColor` | not implemented |
-| `$drawCircularModules` | not implemented |
| `$circleRadius` | not implemented |
-| `$keepAsSquare` | not implemented |
+| `$drawCircularModules` | not implemented |
+| `$outputBase64` | N/A |
| `$imageTransparent` | N/A |
+| `$keepAsSquare` | not implemented |
+| `$returnResource` | N/A |
diff --git a/docs/Built-In-Output-QRFpdf.md b/docs/Built-In-Output-QRFpdf.md
index 62115287c..db35e9ec1 100644
--- a/docs/Built-In-Output-QRFpdf.md
+++ b/docs/Built-In-Output-QRFpdf.md
@@ -3,27 +3,86 @@
[Class `QRFpdf`](https://github.com/chillerlan/php-qrcode/blob/main/src/Output/QRFpdf.php): [Portable Document Format](https://en.wikipedia.org/wiki/PDF) (PDF) output via [FPDF](https://github.com/setasign/fpdf)
+## Example
+
+See: [FPDF example](https://github.com/chillerlan/php-qrcode/blob/main/examples/fpdf.php)
+
+Set the options:
+
+```php
+$options = new QROptions;
+
+$options->outputType = QROutputInterface::FPDF;
+$options->scale = 5;
+$options->fpdfMeasureUnit = 'mm'; // pt, mm, cm, in
+$options->bgColor = [222, 222, 222]; // [R, G, B]
+$options->drawLightModules = false;
+$options->moduleValues = [
+ QRMatrix::M_FINDER_DARK => [0, 63, 255], // dark (true)
+ QRMatrix::M_FINDER_DOT => [0, 63, 255], // finder dot, dark (true)
+ QRMatrix::M_FINDER => [255, 255, 255], // light (false)
+ QRMatrix::M_ALIGNMENT_DARK => [255, 0, 255],
+ QRMatrix::M_ALIGNMENT => [255, 255, 255],
+ QRMatrix::M_DATA_DARK => [0, 0, 0],
+ QRMatrix::M_DATA => [255, 255, 255],
+];
+```
+
+
+Render the output:
+
+```php
+$data = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ';
+$out = (new QRCode($options))->render($data); // -> data:application/pdf;base64,...
+
+echo $out;
+```
+
+
+Return the `FPDF` instance (will ignore other output options):
+
+```php
+$options->returnResource = true;
+
+/** @var \FPDF $fpdf */
+$fpdf = (new QRCode($options))->render($data);
+
+// do stuff with the FPDF instance...
+
+// ...dump output
+header('application/pdf');
+
+echo $fpdf->Output('S');
+```
+
+
+## Additional methods
+
+| method | return | description |
+|---------------------------------------------------|--------|------------------------------|
+| (protected) `initFPDF()` | `FPDF` | Initializes an FPDF instance |
+| (protected) `module(int $x, int $y, int $M_TYPE)` | `void` | Renders a single module |
+
+
## Options that affect this module
-| property | type |
-|--------------------------------|----------------|
-| `$returnResource` | `bool` |
-| `$imageBase64` | `bool` |
-| `$bgColor` | `mixed` |
-| `$drawLightModules` | `bool` |
-| `$fpdfMeasureUnit` | `string` |
+| property | type |
+|---------------------|----------|
+| `$bgColor` | `array` |
+| `$drawLightModules` | `bool` |
+| `$fpdfMeasureUnit` | `string` |
+| `$outputBase64` | `bool` |
+| `$returnResource` | `bool` |
+| `$scale` | `ìnt` |
### Options that have no effect
-| property | reason |
-|------------------------|-----------------|
-| `$drawCircularModules` | N/A |
-| `$circleRadius` | N/A |
-| `$keepAsSquare` | N/A |
-| `$connectPaths` | N/A |
-| `$excludeFromConnect` | N/A |
-| `$scale` | not implemented |
-| `$imageTransparent` | N/A |
-
-
+| property | reason |
+|------------------------|--------|
+| `$circleRadius` | N/A |
+| `$connectPaths` | N/A |
+| `$drawCircularModules` | N/A |
+| `$excludeFromConnect` | N/A |
+| `$imageTransparent` | N/A |
+| `$keepAsSquare` | N/A |
diff --git a/docs/Built-In-Output-QRGdImage.md b/docs/Built-In-Output-QRGdImage.md
index d1fafe85d..09cc3f5ed 100644
--- a/docs/Built-In-Output-QRGdImage.md
+++ b/docs/Built-In-Output-QRGdImage.md
@@ -3,27 +3,104 @@
[Class `QRGdImage`](https://github.com/chillerlan/php-qrcode/blob/main/src/Output/QRGdImage.php): [GdImage](https://www.php.net/manual/book.image) raster graphic output (GIF, JPG, PNG)
+## Example
+
+See: [GdImage example](https://github.com/chillerlan/php-qrcode/blob/main/examples/image.php)
+
+Set the options:
+```php
+$options = new QROptions;
+
+// $outputType can be one of: GDIMAGE_BMP, GDIMAGE_GIF, GDIMAGE_JPG, GDIMAGE_PNG, GDIMAGE_WEBP
+$options->outputType = QROutputInterface::GDIMAGE_WEBP;
+$options->quality = 90;
+// the size of one qr module in pixels
+$options->scale = 20;
+$options->bgColor = [200, 150, 200];
+$options->imageTransparent = true;
+// the color that will be set transparent
+// @see https://www.php.net/manual/en/function.imagecolortransparent
+$options->transparencyColor = [200, 150, 200];
+$options->drawCircularModules = true;
+$options->drawLightModules = true;
+$options->circleRadius = 0.4;
+$options->keepAsSquare = [
+ QRMatrix::M_FINDER_DARK,
+ QRMatrix::M_FINDER_DOT,
+ QRMatrix::M_ALIGNMENT_DARK,
+];
+$options->moduleValues = [
+ QRMatrix::M_FINDER_DARK => [0, 63, 255], // dark (true)
+ QRMatrix::M_FINDER_DOT => [0, 63, 255], // finder dot, dark (true)
+ QRMatrix::M_FINDER => [233, 233, 233], // light (false)
+ QRMatrix::M_ALIGNMENT_DARK => [255, 0, 255],
+ QRMatrix::M_ALIGNMENT => [233, 233, 233],
+ QRMatrix::M_DATA_DARK => [0, 0, 0],
+ QRMatrix::M_DATA => [233, 233, 233],
+];
+```
+
+Render the output:
+
+```php
+$data = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ';
+$out = (new QRCode($options))->render($data); // -> data:image/webp;base64,...
+
+printf('', $alt, $out);
+```
+
+
+Return the `GdImage` instance/resource (will ignore other output options):
+
+```php
+$options->returnResource = true;
+
+/** @var \GdImage|resource $gdImage */
+$gdImage = (new QRCode($options))->render($data);
+
+// do stuff with the GdImage instance...
+$size = imagesx($gdImage);
+// ...
+
+// ...dump output
+header('Content-type: image/jpeg');
+
+imagejpeg($gdImage);
+imagedestroy($gdImage);
+```
+
+
+## Additional methods
+
+| method | return | description |
+|---------------------------------------------------|----------|-------------------------------------------------------------------|
+| (protected) `drawImage()` | `void` | Draws the QR image |
+| (protected) `dumpImage()` | `string` | Creates the final image by calling the desired GD output function |
+| (protected) `module(int $x, int $y, int $M_TYPE)` | `void` | Renders a single module |
+| (protected) `setBgColor()` | `void` | Sets the background color |
+| (protected) `setTransparencyColor()` | `void` | Sets the transparency color |
+
+
## Options that affect this module
-| property | type |
-|--------------------------------|----------------|
-| `$returnResource` | `bool` |
-| `$imageBase64` | `bool` |
-| `$bgColor` | `mixed` |
-| `$drawLightModules` | `bool` |
-| `$drawCircularModules` | `bool` |
-| `$circleRadius` | `float` |
-| `$keepAsSquare` | `array` |
-| `$scale` | `int` |
-| `$imageTransparent` | `bool` |
-| `$transparencyColor` | `mixed` |
-| `$pngCompression` | `int` |
-| `$jpegQuality` | `int` |
+| property | type |
+|------------------------|----------------|
+| `$bgColor` | `mixed` |
+| `$circleRadius` | `float` |
+| `$drawCircularModules` | `bool` |
+| `$drawLightModules` | `bool` |
+| `$imageTransparent` | `bool` |
+| `$quality` | `int` |
+| `$keepAsSquare` | `array` |
+| `$outputBase64` | `bool` |
+| `$returnResource` | `bool` |
+| `$scale` | `int` |
+| `$transparencyColor` | `mixed` |
### Options that have no effect
-| property | reason |
-|--------------------------------|--------|
-| `$connectPaths` | N/A |
-| `$excludeFromConnect` | N/A |
+| property | reason |
+|-----------------------|--------|
+| `$connectPaths` | N/A |
+| `$excludeFromConnect` | N/A |
diff --git a/docs/Built-In-Output-QRImagick.md b/docs/Built-In-Output-QRImagick.md
index 5d3d26957..7fe94abba 100644
--- a/docs/Built-In-Output-QRImagick.md
+++ b/docs/Built-In-Output-QRImagick.md
@@ -9,28 +9,103 @@ Please follow the installation guides for your operating system:
- [PHP Imagick by Example](https://phpimagick.com/) ([github.com/Imagick/ImagickDemos](https://github.com/Imagick/ImagickDemos))
+## Example
+
+See: [ImageMagick example](https://github.com/chillerlan/php-qrcode/blob/main/examples/imagick.php)
+
+Set the options:
+```php
+$options = new QROptions;
+
+$options->outputType = QROutputInterface::IMAGICK;
+$options->imagickFormat = 'webp'; // e.g. png32, jpeg, webp
+$options->quality = 90;
+$options->scale = 20;
+$options->bgColor = '#ccccaa';
+$options->imageTransparent = true;
+$options->transparencyColor = '#ccccaa';
+$options->drawLightModules = true;
+$options->drawCircularModules = true;
+$options->circleRadius = 0.4;
+$options->keepAsSquare = [
+ QRMatrix::M_FINDER_DARK,
+ QRMatrix::M_FINDER_DOT,
+ QRMatrix::M_ALIGNMENT_DARK,
+];
+$options->moduleValues = [
+ QRMatrix::M_FINDER_DARK => '#A71111', // dark (true)
+ QRMatrix::M_FINDER_DOT => '#A71111', // finder dot, dark (true)
+ QRMatrix::M_FINDER => '#FFBFBF', // light (false)
+ QRMatrix::M_ALIGNMENT_DARK => '#A70364',
+ QRMatrix::M_ALIGNMENT => '#FFC9C9',
+ QRMatrix::M_VERSION_DARK => '#650098',
+ QRMatrix::M_VERSION => '#E0B8FF',
+];
+```
+
+
+Render the output:
+
+```php
+$data = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ';
+$out = (new QRCode($options))->render($data); // -> data:image/webp;base64,...
+
+printf('
', $alt, $out);
+```
+
+
+Return the `Imagick` instance (will ignore other output options):
+
+```php
+$options->returnResource = true;
+
+/** @var \Imagick $imagick */
+$imagick = (new QRCode($options))->render($data);
+
+// do stuff with the Imagick instance...
+$imagick->scaleImage(150, 150, true);
+// ...
+
+// ...dump output
+$imagick->setImageFormat('png32');
+
+header('Content-type: image/png');
+
+echo $imagick->getImageBlob();
+```
+
+
+## Additional methods
+
+| method | return | description |
+|--------------------------------------|--------|--------------------------------------------|
+| (protected) `drawImage()` | `void` | Creates the QR image via ImagickDraw |
+| (protected) `module()` | `void` | Draws a single pixel at the given position |
+| (protected) `setBgColor()` | `void` | Sets the background color |
+| (protected) `setTransparencyColor()` | `void` | Sets the transparency color |
+
+
## Options that affect this module
-| property | type |
-|--------------------------------|----------------|
-| `$returnResource` | `bool` |
-| `$imageBase64` | `bool` |
-| `$bgColor` | `mixed` |
-| `$drawLightModules` | `bool` |
-| `$drawCircularModules` | `bool` |
-| `$circleRadius` | `float` |
-| `$keepAsSquare` | `array` |
-| `$scale` | `int` |
-| `$imageTransparent` | `bool` |
-| `$transparencyColor` | `mixed` |
-| `$imagickFormat` | `string` |
+| property | type |
+|------------------------|----------|
+| `$bgColor` | `mixed` |
+| `$circleRadius` | `float` |
+| `$drawCircularModules` | `bool` |
+| `$drawLightModules` | `bool` |
+| `$imageTransparent` | `bool` |
+| `$imagickFormat` | `string` |
+| `$keepAsSquare` | `array` |
+| `$outputBase64` | `bool` |
+| `$quality` | `int` |
+| `$returnResource` | `bool` |
+| `$scale` | `int` |
+| `$transparencyColor` | `mixed` |
### Options that have no effect
-| property | reason |
-|--------------------------------|-------------------|
-| `$connectPaths` | N/A |
-| `$excludeFromConnect` | N/A |
-| `$pngCompression` | GdImage exclusive |
-| `$jpegQuality` | GdImage exclusive |
+| property | reason |
+|-----------------------|-------------------|
+| `$connectPaths` | N/A |
+| `$excludeFromConnect` | N/A |
diff --git a/docs/Built-In-Output-QRMarkupHTML.md b/docs/Built-In-Output-QRMarkupHTML.md
index 85f6335b2..b498728b3 100644
--- a/docs/Built-In-Output-QRMarkupHTML.md
+++ b/docs/Built-In-Output-QRMarkupHTML.md
@@ -1,29 +1,109 @@
# QRMarkupHTML
-[Class `QRMarkupHTML`](https://github.com/chillerlan/php-qrcode/blob/main/src/Output/QRMarkupHTML.php): HTML output (a cheap markup substitute when SVG is not available or not an option)
+[Class `QRMarkupHTML`](https://github.com/chillerlan/php-qrcode/blob/main/src/Output/QRMarkupHTML.php): HTML output
+
+This class is a cheap markup substitute for when SVG is not available or not an option (which was an issue before ca 2012).
+As a general rule: if you plan to display the QR Code in a web browser, you should be using the [SVG output](./Built-In-Output-QRMarkupSVG.md).
+
+
+## Example
+
+See: [HTML example](https://github.com/chillerlan/php-qrcode/blob/main/examples/html.php)
+
+Set the options:
+
+```php
+$options = new QROptions;
+
+$options->outputType = QROutputInterface::MARKUP_HTML;
+$options->cssClass = 'qrcode';
+// default values for unassigned module types
+$options->markupDark = '#555';
+$options->markupLight = '#CCC';
+$options->moduleValues = [
+ // finder
+ QRMatrix::M_FINDER_DARK => '#A71111', // dark (true)
+ QRMatrix::M_FINDER_DOT => '#A71111', // finder dot, dark (true)
+ QRMatrix::M_FINDER => '#FFBFBF', // light (false)
+ // alignment
+ QRMatrix::M_ALIGNMENT_DARK => '#A70364',
+ QRMatrix::M_ALIGNMENT => '#FFC9C9',
+];
+```
+
+Output in a HTML document (via PHP):
+
+```php
+render($data);
+
+header('Content-type: text/html');
+
+?>
+
+
+