plaatje met pallet én alpha laag?

Pagina: 1
Acties:

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Topicstarter
Is het mogelijk om een plaatje te maken met pallet én alpha-laag welke tevens bruikbaar is in php?

Als ik in photoshop (5.0) kies voor de geindexeerde kleuren (image>mode>indexed color) dan vervalt bij het opslaan als png de optie om de alpha-laag mee op te slaan.

Ik wil eigenlijk alleen de grijswaarden van het plaatje opslaan in een pallet zodat ik dit pallet snel kan aanpassen in php. Daarna wil ik dit plaatje rekeninghoudend met de alpha-laag toevoegen aan een ander plaatje.

Heb trouwens al grayscale modus geprobeert maar toen ging php flippen.

Eigenlijk wil ik dit systeem:
Afbeeldingslocatie: http://test.seweso.com/image_jpeg.php?color=000000FF0000AAAAE6&img=appleAfbeeldingslocatie: http://test.seweso.com/image_jpeg.php?color=00000000FF00AAAAE6&img=appleAfbeeldingslocatie: http://test.seweso.com/image_jpeg.php?color=0000000000FFAAAAE6&img=apple
combineren met deze:
Afbeeldingslocatie: http://test.seweso.com/testalpha.php?logo=images/s.png&url=../www/images/icons96/flare.jpg Afbeeldingslocatie: http://test.seweso.com/testalpha.php?logo=images/s.png&url=../www/images/icons96/nijntje.jpg

Ik weet dat dit deels een php-vraag is...maar ja dit leek me zo het duidelijkst

seweso's blog


  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Topicstarter
Té moeilijke vraag?

seweso's blog


  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 19-08 15:22

Willem2

Ω is futile

Ik ben er wel eens mee bezig geweest, maar heb het nooit afgemaakt. Dus ben ik wel ge-interesseerd in jouw image_jpeg.php source! :)

In PSP kan een alphachannel transparancy alleen worden gebruikt voor 8-bit gray of voor truecolour plaatjes. Dus als jij alleen grijswaarden wilt opslaan moet dit wel lukken.
Voor een 256 kleuren palet kun je het dus wel vergeten.

Met 'imagecolorclosestalpha' kun je dan vervolgens met PHP aan de slag, mits je minimaal GD 2.01 hebt.

[ Voor 13% gewijzigd door Willem2 op 11-10-2003 10:25 ]

en nee, ik houd niet van voetbal... :)


  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 19-08 15:22

Willem2

Ω is futile

Net ff geprobeerd; een 16M logo:

Afbeeldingslocatie: http://wnailer.vddh.com/test/logo.png met wit als de alpha channel (kleuren komen niet lekker door natuurlijk... ;) )

met ImageAlphaBlending ($image, TRUE); in mijn plaatje geplakt:

Afbeeldingslocatie: http://wnailer.vddh.com/test/output.jpg

is dit wat je bedoelt?

en nee, ik houd niet van voetbal... :)


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Niet helemaal duidelijk wat je wilt, maar kun je in php niet per pixel de RGB waarde opvragen en zelf splitsen?

Ook niet helemaal efficient, maar als GDlib het niet anders ondersteunt ;)

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Topicstarter
Willem2 schreef op 11 October 2003 @ 10:23:
Ik ben er wel eens mee bezig geweest, maar heb het nooit afgemaakt. Dus ben ik wel ge-interesseerd in jouw image_jpeg.php source! :)

In PSP kan een alphachannel transparancy alleen worden gebruikt voor 8-bit gray of voor truecolour plaatjes. Dus als jij alleen grijswaarden wilt opslaan moet dit wel lukken.
Voor een 256 kleuren palet kun je het dus wel vergeten.

Met 'imagecolorclosestalpha' kun je dan vervolgens met PHP aan de slag, mits je minimaal GD 2.01 hebt.
Zoals ik al gezegd heb had ik grayscale al geprobeerd...en toen ging php flippen (ik kreeg een verstoord plaatje te zien)


Code (vrij te gebruiken :)):

testalpha.php (direct van php.net gepakt ;))
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$photoImage = ImageCreateFromJPEG($url); 
ImageAlphaBlending($photoImage, true); 

$logoImage = ImageCreateFromPNG($logo); 

$logoImage = ImageSelectiveColor($logoImage, 0,128,255);


$logoW = ImageSX($logoImage); 
$logoH = ImageSY($logoImage); 

ImageCopy($photoImage, $logoImage, 0, 0, 0, 0, $logoW, $logoH); 

ImageJPEG($photoImage); // output to browser 

ImageDestroy($photoImage); 
ImageDestroy($logoImage);


image_jpeg.php (zelfgemaakt :))

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
header("Expires: ".gmdate("D, d M Y H:i:s", time() + mktime(0,0,0,1,0,0))." GMT");

/***************************************************************************
 * ImageCreateFromFile
 ***************************************************************************/
function imagecreatefromfile($filename)
{
    $image_info = getimagesize ($filename);
    switch ($image_info[2]) {
        case 2: //IMAGETYPE_JPEG:
        return imagecreatefromjpeg($filename);
        case 3: //IMAGETYPE_PNG:
            return imagecreatefrompng($filename);
        case 1: //IMAGETYPE_GIF:    
            return imagecreatefromgif($filename);
    };
    exit("Error unknown type:".$image_info['mime']."(".$image_info[2].")");
};

    if ($img == '')
    {
        $img = 'seweso-systems';
    };

    if (substr($img, 0, 7) != "http://")
    {
        $img = 'images/'.$img.'.png';
    };

    $image = imagecreatefromfile($img);

    if (!$image)  /* See if it failed */
    {
        echo "error opening file...";
        };


    if (!isset($color))
    {
        $src_width = imagesx($image);
        $src_height = imagesy($image);
        echo "<PRE>";
        for ($iY = 0; $iY < $src_height; $iY++)
        {
            for ($iX = 0; $iX < $src_width; $iX++)
            {
                $color = ImageColorAt($image, $iX, $iY);
                $rgb = imagecolorsforindex ($image, $color);
                $color = str_pad(dechex($rgb['red']),2,"0", STR_PAD_LEFT).str_pad(dechex($rgb['green']),2,"0", STR_PAD_LEFT).str_pad(dechex($rgb['blue']),2,"0", STR_PAD_LEFT);
                //echo "#$color";
                echo "[img]image_jpeg.php?color=000000".$color."FFFFFF&img=".$img2.">";
            };
            echo[/img]";
        };
        echo "</PRE>";
        exit();
    };
    
    //*
    $from_r = hexdec(substr($color, 0, 2));
    $from_g = hexdec(substr($color, 2, 2));
    $from_b = hexdec(substr($color, 4, 2));
    
    $midl_r = hexdec(substr($color, 6, 2));
    $midl_g = hexdec(substr($color, 8, 2));
    $midl_b = hexdec(substr($color, 10, 2));
    
    $last_r = hexdec(substr($color, 12, 2));
    $last_g = hexdec(substr($color, 14, 2));
    $last_b = hexdec(substr($color, 16, 2));
    //*/    

    for ($i = 0; $i<=255; $i++)
    {
        // 0 = from, 128 = midl, 255 = last
        $new_r = $i < 128 ? (-1 * $i + 128) / 128 * $from_r + $i / 128 * $midl_r : ($i - 128) / 128 * $last_r + (-1 * $i + 255) / 128 * $midl_r;
        $new_g = $i < 128 ? (-1 * $i + 128) / 128 * $from_g + $i / 128 * $midl_g : ($i - 128) / 128 * $last_g + (-1 * $i + 255) / 128 * $midl_g;
        $new_b = $i < 128 ? (-1 * $i + 128) / 128 * $from_b + $i / 128 * $midl_b : ($i - 128) / 128 * $last_b + (-1 * $i + 255) / 128 * $midl_b;
        imagecolorset ($image, $i, $new_r, $new_g, $new_b);
    };

    imagejpeg($image, null, 99); 
    exit();
?>

seweso's blog

Pagina: 1