From 51e8214cd2651a90da840bc8cdd1bf6b0cebad29 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Sat, 30 May 2026 16:06:12 +0000 Subject: [PATCH] blanks, papers, pages, fit system, render 100% precision --- .../system/controllers/generator.php | 13 +- .../models/enumerations/paper/format.php | 91 +++++++ .../{products => product}/type.php | 14 +- svoboda/pechatalka/system/models/paper.php | 246 +++++++++++------- svoboda/pechatalka/system/models/product.php | 2 +- svoboda/pechatalka/system/public/test.jpg | Bin 0 -> 119515 bytes .../default/css/pages/generator/pin.css | 3 +- 7 files changed, 260 insertions(+), 109 deletions(-) create mode 100644 svoboda/pechatalka/system/models/enumerations/paper/format.php rename svoboda/pechatalka/system/models/enumerations/{products => product}/type.php (55%) create mode 100644 svoboda/pechatalka/system/public/test.jpg diff --git a/svoboda/pechatalka/system/controllers/generator.php b/svoboda/pechatalka/system/controllers/generator.php index bc042b3..c1b6267 100755 --- a/svoboda/pechatalka/system/controllers/generator.php +++ b/svoboda/pechatalka/system/controllers/generator.php @@ -8,7 +8,9 @@ namespace svoboda\pechatalka\controllers; use svoboda\pechatalka\controllers\core, svoboda\pechatalka\models\paper, svoboda\pechatalka\models\product, - svoboda\pechatalka\models\enumerations\products\type as product_type; + /* svoboda\pechatalka\models\enumerations\paper\type as paper_type, */ + svoboda\pechatalka\models\enumerations\paper\format as paper_format, + svoboda\pechatalka\models\enumerations\product\type as product_type; // Framework for PHP use mirzaev\minimal\http\enumerations\content, @@ -194,7 +196,14 @@ final class generator extends core if ($type === product_type::pin_37) { // Pin 37mm - $biba = paper::a5(type: $type, products: $products, canvas: $canvas); + $biba = paper::generate( + format: paper_format::a6, + type: $type, + products: $products, + canvas: $canvas, + dpi: 80, + fit: true + ); } if (str_contains($this->request->headers['accept'], content::any->value)) { diff --git a/svoboda/pechatalka/system/models/enumerations/paper/format.php b/svoboda/pechatalka/system/models/enumerations/paper/format.php new file mode 100644 index 0000000..d28e08d --- /dev/null +++ b/svoboda/pechatalka/system/models/enumerations/paper/format.php @@ -0,0 +1,91 @@ + + */ +enum format +{ + case a6; + + /** + * Dimensions + * + * @return array The paper format dimensions in centimeters (cm) ['width', 'height'] + */ + public function dimensions(): array + { + return match ($this) { + format::a6 => [ + 'width' => 10.5, + 'height' => 14.8 + ] + }; + } + + /** + * Places + * + * @param product_type $type The product type + * @param int|float $padding The paper padding (print borders) + * + * @return array The paper places by the product type in centimeters (cm) + */ + public function places(product_type $type, int|float $padding = 0): array|false + { + if ($this === format::a6) { + // A6 + + // Initializing the paper dimensions + $paper = $this->dimensions(); + + if ($type === product_type::pin_37) { + // Pin 37mm + + // Initializing the product dimensions + $blank = $type->areas()['blank']; + + // Calculating the general X coordinate + $x = $paper['width'] / 2 - $blank['width'] / 2 - $padding; + + // Initializing the amount of products + $amount = 2; + + // Calculating the summary products height + $height = $blank['height'] * $amount; + + // Calculating the free space on the page + $free = $paper['height'] - $padding * 2 - $height; + + // Calculating the offset between products and from products to the paper borders + $offset = $free / ($amount + 1); + + // Exit (success) + return [ + [ + 'x' => $x, + 'y' => $offset + ], + [ + 'x' => $x, + 'y' => $offset + $blank['height'] + $offset + ], + ]; + } + } + + // Exit (fail) + return false; + } +} diff --git a/svoboda/pechatalka/system/models/enumerations/products/type.php b/svoboda/pechatalka/system/models/enumerations/product/type.php similarity index 55% rename from svoboda/pechatalka/system/models/enumerations/products/type.php rename to svoboda/pechatalka/system/models/enumerations/product/type.php index d302882..c42af59 100644 --- a/svoboda/pechatalka/system/models/enumerations/products/type.php +++ b/svoboda/pechatalka/system/models/enumerations/product/type.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace svoboda\pechatalka\models\enumerations\products; +namespace svoboda\pechatalka\models\enumerations\product; /** * Types of products * - * @package svoboda\pechatalka\models\enumerations\products + * @package svoboda\pechatalka\models\enumerations\product * * @license http://www.wtfpl.net/ Do What The Fuck You Want To Public License * @author Arsen Mirzaev Tatyano-Muradovich @@ -19,19 +19,19 @@ enum type /** * Areas * - * @return array ['visible' => ['width', 'height'], 'blank' => ['width', 'height']] + * @return array The product type areas in centimeters (cm) ['visible' => ['width', 'height'], 'blank' => ['width', 'height']] */ public function areas(): array { return match ($this) { type::pin_37 => [ 'visible' => [ - 'width' => 37, - 'height' => 37 + 'width' => 3.7, + 'height' => 3.7 ], 'blank' => [ - 'width' => 48.5, - 'height' => 48.5 + 'width' => 4.85, + 'height' => 4.85 ] ] }; diff --git a/svoboda/pechatalka/system/models/paper.php b/svoboda/pechatalka/system/models/paper.php index 36cd9f6..3e5a36a 100644 --- a/svoboda/pechatalka/system/models/paper.php +++ b/svoboda/pechatalka/system/models/paper.php @@ -6,7 +6,9 @@ namespace svoboda\pechatalka\models; // Files of the project use svoboda\pechatalka\models\core, - svoboda\pechatalka\models\enumerations\products\type as product_type; + /* svoboda\pechatalka\models\enumerations\paper\type as paper_type, */ + svoboda\pechatalka\models\enumerations\paper\format as paper_format, + svoboda\pechatalka\models\enumerations\product\type as product_type; // Svoboda time use svoboda\time\statement as svoboda; @@ -23,6 +25,7 @@ use Zanzara\Telegram\Type\User as telegram; // Built-in libraries use Imagick as imagick, + ImagickKernel as imagick_kernel, ImagickPixel as imagick_pixel, ImagickDraw as imagick_draw, Exception as exception, @@ -39,120 +42,167 @@ use Imagick as imagick, final class paper extends core { /** - * A5 - * - * + * Generate + * + * @param paper_format $format + * @param product_type $type + * @param array $products + * @param array $canvas + * @param int|float $dpi Dots (pixels) per Inch (used with centimeters) + * @param bool $fit Fit the maximum number of blanks on paper? (duplication) * * @return record The account record from the database */ - public static function a5(product_type $type, array $products, array $canvas = []): mixed + public static function generate(paper_format $format, product_type $type, array $products, array $canvas = [], int|float $dpi = 300, bool $fit = true): mixed { - // Initializing the print DPI - define('dpi', 80); - /* define('dpi', 300); */ + // Initializing the paper dimensions + $dimensions = $format->dimensions(); + $width = (int) round($dimensions['width'] * $dpi); + $height = (int) round($dimensions['height'] * $dpi); + unset($dimensions); - // Initializing the A5 paper dimensions - $a5 = [ - 'width' => (int) round(10.5 * dpi), - 'height' => (int) round(14.8 * dpi) + // Initializing the product areas + $areas = $type->areas(); + + // Calculating the product blank dimensions by the print $dpi + $blank = [ + 'width' => (int) round($areas['blank']['width'] * $dpi), + 'height' => (int) round($areas['blank']['height'] * $dpi) ]; - // Initializing the paper - $paper = new imagick(); - $paper->setResolution(dpi, dpi); - $paper->newImage($a5['width'], $a5['height'], new imagick_pixel("white")); - $paper->setImageUnits(imagick::RESOLUTION_PIXELSPERCENTIMETER); - $paper->setImageFormat("jpg"); + // Calculating the $dpi ratio of the pechatalka interface to the blank dimensions + $ratio = [ + 'width' => $blank['width'] / $canvas['width'], + 'height' => $blank['height'] / $canvas['height'] + ]; - foreach ($products as $product) { - // Iterating over products + // Initializing the circle mask + $mask = new imagick(); + $mask->setResolution($dpi, $dpi); + $mask->newImage($blank['width'], $blank['height'], '#0000'); + $mask->setImageUnits(imagick::RESOLUTION_PIXELSPERCENTIMETER); + $mask->setimageformat('png'); + $mask->setimagematte(true); + $draw = new imagick_draw(); + $draw->setfillcolor('#fff'); + $draw->circle($blank['width'] / 2, $blank['height'] / 2, $blank['width'] / 2, $blank['height']); + $mask->drawimage($draw); - foreach ($product as $layer) { - // Iterating over the product layers + // Initializing the paper places + $places = $format->places(type: $type); - // Filtering - empty($layer['scale']) || $layer['scale'] == 0 and $layer['scale'] = 1; + // Calculating the amount of products + $have = count($products); - // Initializing the product areas - $areas = $type->areas(); + // Calculating the amount of places per paper + $limit = count($places); - // Calculating the product blank dimensions by the print DPI - $blank = [ - 'width' => (int) round($areas['blank']['width'] / 10 * dpi), - 'height' => (int) round($areas['blank']['height'] / 10 * dpi) - ]; + // Calculating the amount of missing products on the paper + $need = $limit - $have; - // Calculating the DPI ratio of the pechatalka interface to the blank dimensions - $ratio = [ - 'width' => $blank['width'] / $canvas['width'], - 'height' => $blank['height'] / $canvas['height'] - ]; + if ($fit && $have < $limit) { + // Received less products then can be fit on the page - // Initializing the circle mask - $circle = new imagick(); - $circle->setResolution(dpi, dpi); - $circle->newImage($blank['width'], $blank['height'], '#0008'); - $circle->setImageUnits(imagick::RESOLUTION_PIXELSPERCENTIMETER); - $circle->setimageformat('png'); - $circle->setimagematte(true); - $draw = new imagick_draw(); - $draw->setfillcolor('#fff'); - $draw->circle($blank['width'] / 2, $blank['height'] / 2, $blank['width'] / 2, $blank['height']); - $circle->drawimage($draw); + for (; $need++ < $limit;) { + // Iterating over free places - // Initializing the layer image - $image = new imagick(); - $image->setResolution(dpi, dpi); - $image->readImage($layer['image']); - $image->setImageUnits(imagick::RESOLUTION_PIXELSPERCENTIMETER); - $image->setimagematte(true); - - $width = (int) round($blank['width'] * $layer['scale']); - $image->adaptiveResizeImage($width, 0); - /* $image->roundCornersImage(50, 50); */ - - $offset = [ - 'x' => ($blank['width'] - $image->getImageWidth()) / 2, - 'y' => ($blank['height'] - $image->getImageHeight()) / 2 - ]; - - $vertical = $blank['height'] - $image->getImageHeight(); - - - - // Добавить нормальные комментарии после глубокго тестирования - - - - - // Reinitializing the product layer offsets - $layer['x'] = (int) round($layer['x'] * $ratio['width']); - $layer['y'] = (int) round($layer['y'] * $ratio['height']); - - $image->compositeImage( - $circle, - imagick::COMPOSITE_DSTIN, - (int) round(-$layer['x'] - $offset['x']), - /* (int) round(-$layer['y'] - $offset['y'] - $vertical / 2) */ - (int) round(-$layer['y'] - $offset['y']) - ); - - // Compositing the layer with the paper - $paper->setImageVirtualPixelMethod(imagick::VIRTUALPIXELMETHOD_TRANSPARENT); - $paper->setImageArtifact('compose:args', "1,0,-0.5,0.5"); - $paper->compositeImage( - $image, - imagick::COMPOSITE_MATHEMATICS, - (int) round($a5['width'] / 2 - $blank['width'] / 2 + $layer['x'] + $offset['x']), - /* (int) round($a5['height'] / 2 - $blank['height'] / 2 + $layer['y'] + $offset['y'] + $vertical / 2) */ - (int) round($a5['height'] / 2 - $blank['height'] / 2 + $layer['y'] + $offset['y']) - ); - - // Writing the paper file - $paper->writeImage(INDEX . DIRECTORY_SEPARATOR . 'test.jpg'); + // Dublicating the product + $products[] = $products[rand(0, $have - 1)]; } } - return true; + // Calculating the amount of papers + $amount = $have % $limit; + + for ($page = 0; $page < $amount; $page++) { + // Iterating over pages + + // Initializing the paper + $paper = new imagick(); + $paper->setResolution($dpi, $dpi); + $paper->newImage($width, $height, new imagick_pixel("#fff")); + $paper->setImageUnits(imagick::RESOLUTION_PIXELSPERCENTIMETER); + $paper->setImageFormat("jpg"); + $paper->setimagematte(true); + + // Calculating the products pages offset + $offset = $page === 0 ? 0 : $page * $amount; + + foreach ($places as $index => $place) { + // Iterating over places + + // Recalculating the place coordinates with DPI + $place['x'] *= $dpi; + $place['y'] *= $dpi; + + // Initializing the product + $product = $products[$offset + $index]; + + foreach ($product as $layer) { + // Iterating over the product layers + + // Filtering and normalizing the layer parameters + empty($layer['scale']) || $layer['scale'] == 0 and $layer['scale'] = 1; + + // Initializing the layer image + $image = new imagick(); + $image->setResolution($dpi, $dpi); + $image->readImage($layer['image']); + $image->setImageUnits(imagick::RESOLUTION_PIXELSPERCENTIMETER); + $image->setimagematte(true); + + // Initializing the layer image height before resizing + $before = $image->getImageHeight(); + + // Resizing the layer image + $image->adaptiveResizeImage((int) round($blank['width'] * $layer['scale']), 0); + $image->roundCornersImage($layer['corners'], $layer['corners']); + + // Calculating the layer image coordinates by the layer image mask + $vertical = $blank['height'] - $before; + $layer['x'] = (int) round($layer['x'] * $ratio['width'] + ($blank['width'] - $image->getImageWidth()) / 2); + $layer['y'] = (int) round($layer['y'] * $ratio['height'] + ($blank['height'] - $image->getImageHeight() + ($vertical > 0 ? $vertical : 0)) / 2); + unset($before, $vertical); + + // Compositing the layer image mask with the layer image + $image->compositeImage( + $mask, + imagick::COMPOSITE_DSTIN, + (int) round(-$layer['x']), + (int) round(-$layer['y']) + ); + + // Drawing the cutting line + $draw = new imagick_draw(); + $draw->setfillcolor($canvas['background'] ?? '#fff'); + $stroke = 1; + $draw->setStrokeOpacity($stroke); + $draw->setStrokeColor('#000'); + $draw->setStrokeWidth(2); + $draw->circle( + $place['x'] + $blank['width'] / 2, + $place['y'] + $blank['height'] / 2, + round($place['x'] + $blank['width'] / 2 - $stroke), + round($place['y'] + $blank['height']) + ); + $paper->drawimage($draw); + + // Compositing the layer image with the paper + $paper->compositeImage( + $image, + $image->getImageCompose(), + (int) round($place['x'] + $layer['x']), + (int) round($place['y'] + $layer['y']) + ); + } + } + + // Writing the paper file + $paper->writeImage(INDEX . DIRECTORY_SEPARATOR . 'test.jpg'); + } + + + // Exit (success) + return []; } } diff --git a/svoboda/pechatalka/system/models/product.php b/svoboda/pechatalka/system/models/product.php index 5d854eb..2e895cc 100644 --- a/svoboda/pechatalka/system/models/product.php +++ b/svoboda/pechatalka/system/models/product.php @@ -6,7 +6,7 @@ namespace svoboda\pechatalka\models; // Files of the project use svoboda\pechatalka\models\core, - svoboda\pechatalka\models\enumerations\products\type as product_type; + svoboda\pechatalka\models\enumerations\product\type as product_type; // Svoboda time use svoboda\time\statement as svoboda; diff --git a/svoboda/pechatalka/system/public/test.jpg b/svoboda/pechatalka/system/public/test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04ee739fe0451cbfacc6936e5e6932e037382ffb GIT binary patch literal 119515 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