Cytat(thek @ 7.03.2011, 16:17:45 )

W takim razie więc:
1. Stwórz obraz o ostatecznej wielkości.
2. Skopiuj na niego obrazek A
3. Ustaw alpha blending na true
4. Dla obrazka B znajdź część wspólną obrazka A i B (100px) oraz w skrypcie ustaw odpowiednio wartości dla alpha przeliczając sobie.
5. Skopiuj na wynikowy obrazek ten fragment.
6. Wyłącz alpha blending
7. Skopiuj pozostałą część obrazka B na wynikowy.
8. Zapisz plik.
9. Jeśli nie zadziała to sprawdź czy aby kanałem alpha nie trzeba się zabawić poprzez imagesavealpha.
Tak minimalizujesz obniżenie wydajności poprzez operację tylko dla części wspólnej obu.
Jak napisaleś tak 'prawie' zarobilem
Po pierwsze robie to w 2 krokach:
1. Na pierwszy obrazek nakładam maskę z gradientem biało -> czarnym - i na podstawie maski wyliczany jest narastajacy transparent
2. Na drugi obrazek nakladam odwrotną maskę.
3. Składam dwa odpowiednio przygotowane obrazki w jeden, z tym że mam jedna uwage, alpha blending musi byc ustawiona na false.
przykładowy kod (nie mój) nakładajacy maske na obrazek:
function nalozMaske( &$picture, $mask, $name) {
// Get sizes and set up new picture
$xSize = imagesx( $mask );
$ySize = imagesy( $mask );
$newPicture = imagecreatetruecolor( $xSize, $ySize );
imagesavealpha( $newPicture, true );
imagefill( $newPicture, 0, 0, imagecolorallocatealpha( $newPicture, 0, 0, 0, 127 ) );
// 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;
imagepng($picture,$name);
}
Z nakładanie fotek chyba sobie poradzicie.
A tu mam pytanie do znawców imagemagick: jest to kod ktory powinien robic dokladnie to co bylo opisane wyzej, z ta roznica ze w 2 linijkach.
Kod jest skopiowany z manuala, zmienilem tylko nazwy plikow, pytanie brzmi: dlaczego to nie dziala?
obrazek1.png -extent 800x200 obrazek2.png \
maska.png -gravity East -composite fota_wynik.jpg
Duże podziękowania dla
thek!