HomeImagickImagickDrawImagickPixelImagick Pixel IteratorImagick KernelTutorial Source codeReport an issue
Category
Example

Set sampling factor

← setProgressMonitor   setSeed →
Sets the image sampling factors.
Theoretically, this function allows you to set the sampling factors to be used by the JPEG compressor. In practice though, it does not seem to function particuarly well. I recommend using `Imagick::setImageProperty()` to set 'jpeg:sampling-factor' to one of the standard down-sampling types. e.g. 4:2:0
  • 4:4:4
  • 4:4:1
  • 4:4:0
  • 4:2:2
  • 4:2:0
  • 4:2:1
  • 4:2:0
  • 4:1:1
  • 4:1:0
e.g. Imagick::setImageProperty('jpeg:sampling-factor', '4:2:0');
Original size = 27764
Option 1,1,1 new size 27764
Option 1,1,2 new size 10740
Option 1,2,1 new size 11466
Option 1,2,2 new size 15371
Option 2,1,1 new size 19377
Option 2,1,2 new size 23320
Option 2,2,1 new size 24052
function setSamplingFactors()
{
    $image_path = "../public/images/FineDetail.png";
    $imagick = new \Imagick(realpath($image_path));
    $imagick->setImageFormat('jpg');
    $imagick->setSamplingFactors(array('2x2', '1x1', '1x1'));

    $compressed = $imagick->getImageBlob();

    $reopen = new \Imagick();
    $reopen->readImageBlob($compressed);

    $reopen->resizeImage(
        $reopen->getImageWidth() * 4,
        $reopen->getImageHeight() * 4,
        \Imagick::FILTER_POINT,
        1
    );
    
    header("Content-Type: image/jpeg");
    echo $reopen->getImageBlob();
}