Elipsa - Izrez iz slike
 
blackmamba 8. nov 2012 17:56:14 Pridružen od:
4. mar 2008
559 objav
392 25 11
#21

Jaz mislim da je veliko lažje naredit feather na robovih z Imagemagick.

Če je "boljše" je pa relativno vprašanje :)


všeč(0) ni všeč(0) spam(0)
 
gentleman 13. nov 2012 09:49:03 Pridružen od:
21. sep 2009
331 objav
381 63 5
#22

Živio!



Potreboval bi še eno pomoč, spet dela tale zadeva težave.

http://bit.ly/SiWxH0



Ko klikneš done, ti izreže kar si izbral.. Sedaj hočem temu selectionu narediti feather z ImageMagick. Problem je v tem, ker trenutno, ko premikaš elipso po sliki in klikneš done, naredim masko ki je velikosti fotografije in ima bel izrez tam kjer si postavil elipso:



Potem imam napisano funkcijo ki loči alpha channel iz slike in izreže:


function imagealphamask( &$picture, $mask ) {
// Get sizes and set up new picture
$xSize = imagesx( $picture );
$ySize = imagesy( $picture );
$newPicture = imagecreatetruecolor( $xSize, $ySize );
imagesavealpha( $newPicture, true );
imagefill( $newPicture, 0, 0, imagecolorallocatealpha( $newPicture, 0, 0, 0, 127 ) );

// Resize mask if necessary
if( $xSize != imagesx( $mask ) || $ySize != imagesy( $mask ) ) {
$tempPic = imagecreatetruecolor( $xSize, $ySize );
imagecopyresampled( $tempPic, $mask, 0, 0, 0, 0, $xSize, $ySize, imagesx( $mask ), imagesy( $mask ) );
imagedestroy( $mask );
$mask = $tempPic;
}

// Perform pixel-based alpha map application
for( $x = 0; $x < $xSize; $x++ ) {
for( $y = 0; $y < $ySize; $y++ ) {
$alpha = imagecolorsforindex( $mask, imagecolorat( $mask, $x, $y ) );
$alpha = 127 - floor( $alpha[ 'red' ] / 2 );
$color = imagecolorsforindex( $picture, imagecolorat( $picture, $x, $y ) );
imagesetpixel( $newPicture, $x, $y, imagecolorallocatealpha( $newPicture, $color[ 'red' ], $color[ 'green' ], $color[ 'blue' ], $alpha ) );
}
}

// Copy back to original picture
imagedestroy( $picture );
$picture = $newPicture;
}

Torej, kako lahko maski z imagemagick povem da bi rad delal feather na robovih.

Recimo poskusil sem tole:


exec("convert img/maska.png  -channel RGBA  -blur 0x8  img/maska.png");

ampak to celotno masko naredi transparentno, ne samo elipse.


exec("convert img/maska.png -alpha set \ -background none  -vignette 0x4  img/maska.png");

tole pa dela ok, ampak je problem da vzame celotno masko in črno ozadje fejda in ne bele elipse (zgornja slika)



Torej, če gledamo zgornjo sliko, moram fejdat robove bele elipse za izrez.

Če je rešitev težka se lahko dogovorimo tudi za plačilo.



lp


všeč(2) ni všeč(0) spam(0)
 
blackmamba 13. nov 2012 12:38:33 Pridružen od:
4. mar 2008
559 objav
392 25 11
#23

Drugače, kot uporaben link zgooglat, ti žal ne znam pomagat, ker nisem nikoli tega počel.

http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=18286


všeč(2) ni všeč(0) spam(0)
 
gentleman 19. nov 2012 19:25:16 Pridružen od:
21. sep 2009
331 objav
381 63 5
#24

Za vse ki morda potrebujete.



Za feather bele maske na črni podlagi z imagemagick uporabite funkcijo:


exec("convert img/maska.png mask -blur 5x65000 -level 0x95% featheredmask img/maska.png");

Pa še eno moje zadnje vprašanje:

Pozna kdo funkcijo z katero lahko narišem elipso na sliko, in jo potem ROTIRAM v stopinjah? Imagefillellipse od php-ja mi nudi samo x,y in pa pozicijo, ne pa tudi koliko bi rad elipso obrnil. Anyone? ;)


všeč(2) ni všeč(0) spam(0)
 
blackmamba 19. nov 2012 19:39:30 Pridružen od:
4. mar 2008
559 objav
392 25 11
#25

A ni hitreje in lažje, če v google vpišeš :)



http://lmgtfy.com/?q=php+ellipse+rotate



http://www.php.net/manual/en/function.imageellipse.php#67420



Enjoy :)


všeč(1) ni všeč(0) spam(0)
 
gentleman 19. nov 2012 21:31:55 Pridružen od:
21. sep 2009
331 objav
381 63 5
#26

@blackmamba: :) Vem, sem že probal to, ampak ne nariše. Kako bi ti po tvoje prav klical to funkcijo da bi narisala ?



Recimo če imamo trenutno:


$mask = imagecreatetruecolor($width, $height);
$transparent = imagecolorallocate($mask, 255, 0, 0);
imagecolortransparent($mask, $transparent);
imagefilledellipse($mask, $x, $y, $w, $h, $transparent);

Ti bi namesto imagefilledellipse dal funkcijo za rotacijo ali kako? :)


všeč(1) ni všeč(0) spam(0)
 
blackmamba 19. nov 2012 22:08:07 Pridružen od:
4. mar 2008
559 objav
392 25 11
#27

Da. Sem se potrudil in ti naredil primer, čeprav imam še dosti svojega dela na lagerju.



http://lukna.com/elipsa.php

http://lukna.com/elipsa.php.txt


všeč(4) ni všeč(0) spam(0)
 
gentleman 19. nov 2012 22:13:43 Pridružen od:
21. sep 2009
331 objav
381 63 5
#28

I fu*** love you :) Blackmamba, kontaktiraj prosim na ZS tvoj Skype.. te povabim na pivo ali frišno pico z pivom, pa da še kakšno rečeva ;)


všeč(1) ni všeč(0) spam(0)
 
gentleman 26. nov 2012 00:19:32 Pridružen od:
21. sep 2009
331 objav
381 63 5
#29

Spet jaz. :)



Se prav lotujem tegale; Rad bi izrezal tole elipso zdaj iz slike, z kvadratim izrezom.. Poznam width in height elipse, in x in y na kateri je elipsa.





Lotil sem se tak:


$canvas = imagecreatetruecolor($wElipse, $hElipse);
$current_image = imagecreatefromjpeg($filename);
imagecopy($canvas, $current_image, 0, 0, $xElipse, $yElipse, $wElipse, $hElipse);
imagejpeg($canvas, $filename, 100);

Sicer cropa, ampak zelo slabo in popačeno... Anyone ima bolšo idejo ?


všeč(0) ni všeč(0) spam(0)
 
blackmamba 26. nov 2012 11:08:58 Pridružen od:
4. mar 2008
559 objav
392 25 11
#30

Sej vem, da si mene čakal :)

V spodnjem primeru sem shranil v transparentni png, kar je pomojem boljša ideja kot jpg.



http://lukna.com/elipsa2.php

http://lukna.com/elipsa2.php.txt


všeč(4) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se