Ergebnis 1 bis 9 von 9
  1. #1
    Avatar von .holger
    .holger ist offline Lounge-Member
    registriert
    22-04-2001
    Ort
    HB und Zw'ahn
    Beiträge
    5.789

    [PHP/image] Ecken abrunden

    Ich wollte mir ein PHP-Script schreiben, dass mir von Bildern die Ecken abrundet.

    Ich wollte das Bild, das übringbleibt quasi "ausschneiden" Ich bin jetzt so weit (jedenfalls in der theorie - gecodet hab ich noch nichts - erstmal überlegen ob ich auch theoretisch alles schaffe), dass ich das übrige Bild mit2 Rechtecken und 4 Kreisen (in den Ecken) übermalen kann. Dann hab ich also nur die Ecken die eigentlcih weg sollen. Jetzt hab ich mir gedacht könnte ich alles invertieren, also das ausgeschnittene da lassen und dafür die Ecken wegschneiden. Doch weiss ich leider nciht wie ich das am besten realisieren kann. Ich könnte pixel für Pixel gucken ob der Teil des Bildes zur anzuschneidenen Ecke oder zum Restbild gehört, was aber schwachsinnig wäre.

    praktisch wäre wenn ich das Restbild nicht übermalen sondern stattdessen irgendwie auswählen (wie mit Auswahltool bei gimp/Photoshop/etc) und dann die Auswahl invertieren.

    Hat einer eine Idee wie man das realisieren könnte?

    MFG .ich

  2. #2
    Avatar von .holger
    .holger ist offline Lounge-Member
    registriert
    22-04-2001
    Ort
    HB und Zw'ahn
    Beiträge
    5.789
    also nicht,... damn,.... ich könnte ja Ecken als eigene Bilder abspeichern und eifnach drüberpacken.... das würde gehen, dann kann ich zwar nur einfarbigen Hintergrund nehmen, aber besser als nix.....

  3. #3
    Avatar von J-C
    J-C
    J-C ist offline Lounge-Member
    registriert
    20-02-2003
    Ort
    in your subconsciousness
    Beiträge
    3.942
    also ich habe für mein "outerglow"-script sowas benutzt - der schein muss ja auch rund sein ...
    guggst du zB hier ... meinst du sowas? (die thumbs sind NATÜRLICH generiert...)
    ---8<-----------------------------------------------------------------------
    Tutorials
    Freistellen von Objekten
    Bilder ineinanderblenden / Masken


    In 4 Schritten zur farblich ansprechenden Homepage
    1. Farbsuche
    2. Farbwirkung
    3. Farbeinsatz
    4. Website layouten


  4. #4
    Avatar von .holger
    .holger ist offline Lounge-Member
    registriert
    22-04-2001
    Ort
    HB und Zw'ahn
    Beiträge
    5.789
    Ich mein, dass ich von den Bildern was abschneide, aber ich hab grad die Idee:
    Ich pack die Ecken da als eigene Bilder drüber, wobei ich die Ränder, die Rund sein sollen bzw. vom eigentlcihen BIld abgeschnitten werden sollen in einer "krassen" Farbe, die eigentlcih in Bildern selten vorkommt einfärbe, dann stetze ich die Farbe transparent und gebe das als png aus... damn... warte ... der IE kann png nicht richtig... FUCK... ok, dann doch einfarbig.... weil ja nur png und gif transparenz darstellen können, da hätte ich auf früher dran denken können... F*CK!!!!!

  5. #5
    Avatar von J-C
    J-C
    J-C ist offline Lounge-Member
    registriert
    20-02-2003
    Ort
    in your subconsciousness
    Beiträge
    3.942
    ich versteh dich nicht - mit meinem script kannsu dynamisch einen Hintergrund angeben und er berechnet das einfach .... und statt weiss zu nehmen, liest du einfach die farbe aus ... sag einfach bescheid und ich schick es dir ....
    [edit]
    ach was solls - hier isses

    PHP-Code:
    <?PHP
    /*
     Title:            OuterGlow/DropShadow-Thumbnail-Creator
     Description:        creates a thumbnail out of an image and adds outerglow
    */


    $nova_max_largura 200;
    $nova_max_altura 150;
    $glowsize 10;
    $hexr '33';
    $hexg '33';
    $hexb '66';
    $hexzielr 'FF';
    $hexzielg 'FF';
    $hexzielb 'FF';

    $scalefactor 0.14;
    $RGB = Array();
    $HSL = Array();
    $DropHSL = Array();
    $k 0;
    $hex = Array("0""1""2""3""4""5""6""7""8""9""A""B""C""D""E""F");

    for (
    $i 0$i 16$i++)
    {
     for (
    $j 0$j 16$j++)
     {
      
    $RGB[$k] = $hex[$i] + $hex[$j];
      
    $k++;
     }
    }

    /* CREATING THE THUMBNAIL */
    $imagem $image;          // übergebener Parameter
    $img_origem imagecreatefromjpeg($imagem);
    $o_x imagesx($img_origem);
    $o_y imagesy($img_origem);
    $xfactor $o_x/$nova_max_largura;
    $yfactor $o_y/$nova_max_altura;

    if(
    $o_y/$xfactor <= $nova_max_altura)
    {
     
    $nova_largura $o_x/$xfactor;
     
    $nova_altura $o_y/$xfactor;
    }
    else
    {
     
    $nova_largura $o_x/$yfactor;
     
    $nova_altura $o_y/$yfactor;
    }

    $img_destino imagecreatetruecolor($nova_largura+2*$glowsize,$nova_altura+2*$glowsize);
    imagecopyresampled($img_destino$img_origem,$glowsize,$glowsize,0,0,$nova_largura,$nova_altura,imagesx ($img_origem),imagesy($img_origem));


    function 
    HextoDec($strHex)
    {
     
    $intMax 6;
     if(
    strlen($strHex) <= $intMax)
     {
      
    $e = array();
      
    $z = array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
      
    $d 0;
      
    $chk 0;
      
    $strHex strtoupper($strHex);
      for(
    $i=0;$i<strlen($strHex);$i++)
      {
       for(
    $j=0;$j<=16;$j++)
        {
         if(
    substr($strHex,$i,$i+1) == $z[$j])
          {
           
    $chk 1;
           
    $e[$i] = $j;
          }
        }
       if(
    $chk == 0) echo "unerlaubte Ziffer!";
      }
      for(
    $i=0;$i<strlen($strHex);$i++) $d $d $e[$i] * pow(16,(strlen($strHex)-$i-1));
     }
     else 
    $d "zu lange ziffer";
     return(
    $d);
    }


    $decr =  HextoDec($hexr);
    $decg =  HextoDec($hexg);
    $decb =  HextoDec($hexb);
    $zielr HextoDec($hexzielr);
    $zielg HextoDec($hexzielg);
    $zielb HextoDec($hexzielb);

    /*-- linke obere Ecke --*/

    for($i=0;$i<$glowsize;$i++)
    {
     for(
    $j=0;$j<$glowsize;$j++)
     {
      
    $breite $glowsize;
      
    $bx sin(pi()/2*$j/$breite)*cos(pi()/2*$i/$breite);
      if(
    $bx 0)
      {
       
    $r = ($zielr * ($bx) + $decr * (1-$bx));
       
    $g = ($zielg * ($bx) + $decg * (1-$bx));
       
    $b = ($zielb * ($bx) + $decb * (1-$bx));
      }
      else
      {
       
    $r $decr;
       
    $g $decg;
       
    $b $decb;
      }
      
    $col   ImageColorAllocate ($img_destino$r$g$b);
      
    imagesetpixel($img_destino,$j,$glowsize-$i-1,$col);
      if(
    $i== 0)
      {
       
    $vertRGB[$j][0] = $r;
       
    $vertRGB[$j][1] = $g;
       
    $vertRGB[$j][2] = $b;
      }

     }
     
    $horzRGB[$glowsize-$i-1][0] = $r;
     
    $horzRGB[$glowsize-$i-1][1] = $g;
     
    $horzRGB[$glowsize-$i-1][2] = $b;
    }


    /*-- oberer Rand --*/

    for($i=0;$i<$glowsize;$i++)
    {
     
    $col   ImageColorAllocate ($img_destino$horzRGB[$i][0],$horzRGB[$i][1],$horzRGB[$i][2]);
     for(
    $j=$glowsize;$j<$glowsize+$nova_largura;$j++) imagesetpixel($img_destino,$j,$i,$col);
    }


    /*-- rechte obere Ecke --*/

    for($i=0;$i<$glowsize;$i++)
    {
     for(
    $j=0;$j<$glowsize;$j++)
     {
      
    $breite $glowsize;
      
    $bx sin(pi()/2*$j/$breite)*cos(pi()/2*$i/$breite);
      if(
    $bx 0)
      {
       
    $r = ($zielr * ($bx) + $decr * (1-$bx));
       
    $g = ($zielg * ($bx) + $decg * (1-$bx));
       
    $b = ($zielb * ($bx) + $decb * (1-$bx));
      }
      else
      {
       
    $r $decr;
       
    $g $decg;
       
    $b $decb;
      }
      
    $col   ImageColorAllocate ($img_destino$r$g$b);
      
    imagesetpixel($img_destino,2*$glowsize+$nova_largura-$j-1,$glowsize-$i-1,$col);
     }
    }

    /*-- linker Rand --*/

    for($i=0;$i<$glowsize;$i++)
    {
     
    $col   ImageColorAllocate ($img_destino$vertRGB[$i][0],$vertRGB[$i][1],$vertRGB[$i][2]);
     for(
    $j=$glowsize;$j<$glowsize+$nova_altura;$j++) imagesetpixel($img_destino,$i,$j,$col);
    }


    /*-- rechter Rand --*/

    for($i=$glowsize-1;$i>=0;$i--)
    {
     
    $col   ImageColorAllocate ($img_destino$vertRGB[$i][0],$vertRGB[$i][1],$vertRGB[$i][2]);
     for(
    $j=$glowsize;$j<$glowsize+$nova_altura;$j++) imagesetpixel($img_destino,2*$glowsize+$nova_largura-$i-1,$j,$col);
    }


    /*-- linke untere Ecke --*/

    for($i=0;$i<$glowsize;$i++)
    {
     for(
    $j=0;$j<$glowsize;$j++)
     {
      
    $breite $glowsize;
      
    $bx sin(pi()/2*$j/$breite)*cos(pi()/2*$i/$breite);
      if(
    $bx 0)
      {
       
    $r = ($zielr * ($bx) + $decr * (1-$bx));
       
    $g = ($zielg * ($bx) + $decg * (1-$bx));
       
    $b = ($zielb * ($bx) + $decb * (1-$bx));
      }
      else
      {
       
    $r $decr;
       
    $g $decg;
       
    $b $decb;
      }

      
    $col   ImageColorAllocate ($img_destino$r$g$b);
      
    imagesetpixel($img_destino,$j,$glowsize+$nova_altura+$i,$col);
     }
    }


    /*-- unterer Rand --*/

    for($i=$glowsize-1;$i>=0;$i--)
    {
     
    $col   ImageColorAllocate ($img_destino$horzRGB[$i][0],$horzRGB[$i][1],$horzRGB[$i][2]);
     for(
    $j=$glowsize;$j<($glowsize+$nova_largura);$j++) imagesetpixel($img_destino,$j,2*$glowsize+$nova_altura-$i-1,$col);
    }


    /*-- rechte untere Ecke --*/

    for($i=0;$i<$glowsize;$i++)
    {
     for(
    $j=$glowsize-1;$j>=0;$j--)
     {
      
    $breite $glowsize;
      
    $bx sin(pi()/2*$j/$breite)*cos(pi()/2*$i/$breite);
      if(
    $bx 0)
      {
       
    $r = ($zielr * ($bx) + $decr * (1-$bx));
       
    $g = ($zielg * ($bx) + $decg * (1-$bx));
       
    $b = ($zielb * ($bx) + $decb * (1-$bx));
      }
      else
      {
       
    $r $decr;
       
    $g $decg;
       
    $b $decb;
      }
      
    $col   ImageColorAllocate ($img_destino$r$g$b);
      
    imagesetpixel($img_destino,2*$glowsize+$nova_largura-$j-1,$glowsize+$nova_altura+$i,$col);
     }
    }

    /* ABSCHLUSS */
    /* eventuelles Speichern des Thumbnails*/
    $strThumbName $strCacheDir."/".$strFileName."_".$intModTime.".jpg";
    imageJPEG($img_destino,$strThumbName);
    imagedestroy($img_destino);
    //chmod($strThumbName, 0777);
    $fp fopen($strThumbName,rb);
    fpassthru($fp);
    ?>
    [/edit]
    ---8<-----------------------------------------------------------------------
    Tutorials
    Freistellen von Objekten
    Bilder ineinanderblenden / Masken


    In 4 Schritten zur farblich ansprechenden Homepage
    1. Farbsuche
    2. Farbwirkung
    3. Farbeinsatz
    4. Website layouten


  6. #6
    Avatar von .holger
    .holger ist offline Lounge-Member
    registriert
    22-04-2001
    Ort
    HB und Zw'ahn
    Beiträge
    5.789
    äh,.. danke... ich arbeite mich da mal durch

  7. #7
    Avatar von Albu
    Albu ist offline Foren-Gott
    registriert
    04-07-2001
    Beiträge
    13.501
    arghhh hier wird ja jede Ecke einzeln behandelt!!
    Wie wärs denn mal mit einer Funktion zum Einfärben einer beliebigen Ecke, die einfach 4 mal aufgerufen wird??
    Es muß ja keine Klasse sein, die hier eingesetzt wird, aber ein bißchen mehr Modularität wäre ned schlecht (das Argument, daß es läuft ist nicht immer ausreichend). tztztztz
    1. Get people to play Space Taxi
    2. Sell real estates on neptun
    3. Profit!

    IE is not a browser, it is a scream.


    Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark to read.

  8. #8
    Avatar von .holger
    .holger ist offline Lounge-Member
    registriert
    22-04-2001
    Ort
    HB und Zw'ahn
    Beiträge
    5.789
    @J-C bei deinem Script wird, wenn ich das richtig sehe, an die Thumbs aussen der Rand rangemacht, ich will den ja teilweise abmachen,... das war ja das Problem.... ich denke dass ich damit nicht weiterkomme.....

  9. #9
    Avatar von J-C
    J-C
    J-C ist offline Lounge-Member
    registriert
    20-02-2003
    Ort
    in your subconsciousness
    Beiträge
    3.942
    @ albu - ich war froh dass es überhaupt irgendwi gefunzt hat .. und ich hatte noch keine zeit das zu optimieren

    @ .colin - trotzdem seh ich das problem nicht?
    1. statt den Rand drumherum zu machen - zeichne ihn REIN
    2. statt weiss zu verwenden lies einfach die farbe des Pixels an der Stelle aus und rechne damit weiter
    ---8<-----------------------------------------------------------------------
    Tutorials
    Freistellen von Objekten
    Bilder ineinanderblenden / Masken


    In 4 Schritten zur farblich ansprechenden Homepage
    1. Farbsuche
    2. Farbwirkung
    3. Farbeinsatz
    4. Website layouten


Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •