source: spip-zone/_plugins_/filtres_images_vectorise/trunk/lib/geometrize/src/shape/ShapeFactory.php @ 116199

Last change on this file since 116199 was 116199, checked in by cedric@…, 21 months ago

Un plugin pour vectoriser en SVG des images bitmap, qui propose 4 nouveaux filtres

  • extraire_palette_couleurs permet d'extraire une palette de couleur d'une image (par defaut les 3 couleurs les plus representees) en utilisant un calcul des couleurs dominantes par partitionnement en k-moyennes

`
<BOUCLE_palette(POUR){tableau #FICHIER|extraire_palette_couleurs{3}}>
<div style="display: inline-block;width: 30px;height: 15px;background-color: #VALEUR;"></div>
</BOUCLE_palette>
`

  • image_geometrize permet de creer une image SVG approchante de l'image d'origine en utilisant le lib GeometrizePHP https://github.com/Cerdic/geometrize-php/ (attention methode gourmande en temps de calcul)
  • image_potrace permet de generer un trace SVG depuis l'image d'origine, a l'aide de Potracio PHP qui est un portage PHP de PotRace? https://seenthis.net/messages/645575
  • image_geopotrize combine les 2 techniques : un background geometrize qui n'a pas besoin d'un grand nombre de shapes et un trace potrace superpose/mixe

Les 3 filtres ont tout un tas d'option pour qui veut jouer avec, mais les reglages par defaut permettent d'avoir immediatement un joli resultat exploitable
A noter que pour image_geometrize, le temps de calcul peut depasser les 30s pour generer le nombre de shapes demandees, selon les reglages utilises.
Dans ce cas le calcul est arrete au bout de 20s, on stocke et on renvoie l'image provisoire incomplete, et on stocke l'etat du calcul qui reprendra au prochain calcul de la page.

(J'evite les screenshots dans le message de commit mais le coeur y est)

File size: 2.2 KB
Line 
1<?php
2
3namespace Cerdic\Geometrize\Shape;
4
5class ShapeFactory {
6
7        /**
8         * Create a random shape from a given type
9         * @param int $type
10         * @param int $xBound
11         * @param int $yBound
12         * @param float $shapeSizeFactor
13         * @return \Cerdic\Geometrize\Shape\Shape
14         */
15        static function create($type, $xBound, $yBound, $shapeSizeFactor=1.0){
16                switch ($type) {
17                        case ShapeTypes::T_RECTANGLE:
18                                return new Rectangle($xBound, $yBound);
19                                break;
20                        case ShapeTypes::T_ROTATED_RECTANGLE:
21                                return new RotatedRectangle($xBound, $yBound);
22                                break;
23                        case ShapeTypes::T_TRIANGLE:
24                                return new Triangle($xBound, $yBound, $shapeSizeFactor);
25                                break;
26                        case ShapeTypes::T_ELLIPSE:
27                                return new Ellipse($xBound, $yBound);
28                                break;
29                        case ShapeTypes::T_ROTATED_ELLIPSE:
30                                return new RotatedEllipse($xBound, $yBound);
31                                break;
32                        case ShapeTypes::T_CIRCLE:
33                                return new Circle($xBound, $yBound);
34                                break;
35                        case ShapeTypes::T_LINE:
36                                return new Line($xBound, $yBound);
37                                break;
38                        case ShapeTypes::T_QUADRATIC_BEZIER:
39                                return new QuadraticBezier($xBound, $yBound);
40                                break;
41                }
42        }
43
44        /**
45         * Create any random type of a shape in known shape types
46         *
47         * @param int $xBound
48         * @param int $yBound
49         * @param float $shapeSizeFactor
50         * @return \Cerdic\Geometrize\Shape\Shape
51         * @throws \Exception
52         */
53        static function randomShape($xBound, $yBound, $shapeSizeFactor=1.0){
54                $a = [
55                        ShapeTypes::T_RECTANGLE,
56                        ShapeTypes::T_ROTATED_RECTANGLE,
57                        ShapeTypes::T_TRIANGLE,
58                        ShapeTypes::T_ELLIPSE,
59                        ShapeTypes::T_ROTATED_ELLIPSE,
60                        ShapeTypes::T_CIRCLE,
61                        ShapeTypes::T_LINE,
62                        ShapeTypes::T_QUADRATIC_BEZIER,
63                ];
64                return ShapeFactory::randomShapeOf($a, $xBound, $yBound, $shapeSizeFactor);
65        }
66
67        /**
68         * Create a random shape in a given list of possioble types
69         * @param array $types
70         * @param int $xBound
71         * @param int $yBound
72         * @param float $shapeSizeFactor
73         * @return \Cerdic\Geometrize\Shape\Shape
74         * @throws \Exception
75         */
76        static function randomShapeOf($types, $xBound, $yBound, $shapeSizeFactor=1.0){
77                if (!is_array($types) || !count($types)){
78                        throw new \Exception("FAIL: types != null && count(types) > 0");
79                }
80                return ShapeFactory::create($types[mt_rand(0, count($types)-1)], $xBound, $yBound, $shapeSizeFactor);
81        }
82
83}
Note: See TracBrowser for help on using the repository browser.