shop-old/libs/phImaginator/phImaginator.Collage.class.php
2026-04-20 01:03:43 +02:00

77 lines
1.7 KiB
PHP

<?php
abstract class phImaginator_Collage extends phImaginator_Universal implements phImaginator_Module {
protected static $runCollected = true;
public static function ordered($params) {
require_once 'phImaginator.Resize.class.php';
self::universalCollage('ordered', $params);
}
public static function fitted($params) {
require_once 'phImaginator.Box.class.php';
self::universalCollage('fitted', $params);
}
private static function universalCollage($type, $params) {
$width = $params[0];
$height = $params[1];
if (is_array(parent::$imageSourceCollection)) {
$images_count = count(parent::$imageSourceCollection);
$proportion = $width / $height;
$imr = sqrt($images_count);
$imr_x = round($imr * $proportion);
$imr_y = round($images_count / $imr_x);
$imageBox_w = $width / $imr_x;
$imageBox_h = $height / $imr_y;
$collageImage = imagecreatetruecolor($width, $height);
$bgcolor = parent::transparency($collageImage, $params[2], $params[3]);
imagefill($collageImage, 0, 0, $bgcolor);
for ($y = 0; $y < $imr_y; ++$y) {
for ($x = 0; $x < $imr_x; ++$x) {
$image_data = array_shift(parent::$imageSourceCollection);
if (!$image_data) {
break;
}
if ($type == 'fitted') {
phImaginator_Box::fit($image_data, array($imageBox_w, $imageBox_h));
} else if ($type == 'ordered') {
phImaginator_Resize::fitBoth($image_data, array($imageBox_w, $imageBox_h));
}
imagecopyresampled($collageImage, $image_data['resource'], $x * $imageBox_w, $y * $imageBox_h, 0, 0, $image_data['width'], $image_data['height'], $image_data['width'], $image_data['height']);
}
}
parent::replaceSourceCollection($collageImage);
}
}
}
?>