2017-06-04 4 views
1

Image originale: Original image Voici ce que je dois: Here what i need Il devrait être créé à partir de ce petit carreau: It should be created from this small tileComment faire un cadre d'image en mosaïque sans utiliser la fonction exec?

Beaucoup de gens suggèrent d'utiliser la solution ImageMagick (en utilisant la fonction php exec) - http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=21867:

convert frame_template.gif \ 
-tile blackthin_top.gif -draw 'color 1,0 floodfill' -rotate 90 \ 
-tile blackthin_btm.gif -draw 'color 1,0 floodfill' -rotate 90 \ 
-tile blackthin_top.gif -draw 'color 1,0 floodfill' -rotate 90 \ 
-tile blackthin_btm.gif -draw 'color 1,0 floodfill' -rotate 90 \ 
-gravity center thumbnail.gif -composite frame_filled.gif 

ou

solution PicFrame (à l'aide de la fonction php exec) - http://www.fmwconcepts.com/imagemagick/picframe/index.php:

picframe [-f frameid] [-m mattesize] [-c mattecolor] [-b bordersize] [-s shade] [-a adjust] [-o opacity ] [-d distance] infile outfile 

PHP imagick a une grande capacité à créer des bordures de couleur avec:

$imagick = new \Imagick('image.jpg'); 
$imagick->scaleImage(300, 300, false); 

// Create frame placeholder 
$imagick->frameimage('red','30','30', 30, 0); 

// Flood fill with color 
$imagick->floodFillPaintImage('green', 10, '#6e0000',0, 0,false 
); 

header("Content-Type: image/jpg"); 
echo $imagick->getImageBlob(); 

Mais PHP imagick ne peut pas utiliser votre propre mosaïque d'images pour créer cadre, que des couleurs unies. Voici une question très similaire - How to flood fill the frame with a pattern image using imagick php class?

Une autre bonne solution de - https://stackoverflow.com/a/28778953/2337706 mais il crée une image à partir de grandes images PNG et vous devez connaître la taille d'image correcte.

Je sais que je peux le créer avec php GD - http://php.net/manual/en/ref.image.php mais je ne sais pas comment l'implémenter de cette façon.

+0

Quel est le problème avec l'aide de PHP exec()? Il est très facile d'utiliser une solution préexistante et de ne pas avoir à tout inventer à nouveau – fmw42

+0

@ fmw42 oui vous avez raison, c'est facile à utiliser et pratique, mais beaucoup de clients utilisent un hébergement partagé qui ne fournit pas d'accès php exec() ou je ne suis pas vrai? – kostya572

+0

Je ne fais pas grand-chose avec Imagick et je n'ai pas essayé cela, mais http://us3.php.net/manual/fr/imagick.textureimage.php est la fonction qui va paver une image. Vous devriez être capable d'utiliser cela pour atteindre les résultats souhaités. – fmw42

Répondre

0

En ImageMagick, vous pouvez simplement faire quelque chose de simple comme ceci:

convert a1Wit.jpg -mattecolor black -frame 10x10+3+3 -gravity west -chop 3x0 -bordercolor gold -border 3 frame_result.jpg 

enter image description here

Ces commandes devraient être assez faciles à traduire en Imagick. Voir http://us3.php.net/manual/en/imagick.frameimage.php et http://us3.php.net/manual/en/imagick.chopimage.php et http://us3.php.net/manual/en/imagick.borderimage.php

Ou simplement:

convert a1Wit.jpg -bordercolor black -border 7 -bordercolor "gray(35%)" -border 3 -bordercolor "#D0A456" -border 3 frame_result2.jpg 

enter image description here

Ou

convert a1Wit.jpg -mattecolor "gray(30%)" -frame 13x13+5+5 -gravity northwest -shave 5x5 -bordercolor "#D0A456" -border 3 frame_result3.jpg 

enter image description here

Ou

convert a1Wit.jpg -mattecolor "gray(30%)" -frame 13x13+5+5 -gravity northwest -bordercolor "#D0A456" -border 3 frame_result4.jpg 

enter image description here

Régler les épaisseurs de couleur comme vous le souhaitez