• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Grafiken mit PHP

PHP-B-GINNA

New member
so - thumbnails mit PHP zu erzeugen, das hab ich endlich hinbekommen - nur würde ich da doch noch ein bisschen was machen wollen - wie kann ich zB (möglichst einfach) einen dropshadow oder outer_glow an die thumbnails basteln

zB:
http://www.deviantart.com macht das so?

any suggestions?
 
entweder mergen die da zwei Bilder per PHP, was bei den unterschiedlichen Thumbnail Größen nicht ganz hinhaut, es sei denn die haben nur eine handvoll Formate, oder die hamm irgendwelche Filter per ImageMagick eingesetzt...
 
man könnte so nen verlauf auch mitner for schleife machen, aber das is zu rechenintensiv, finde ich?
 
Ich würde sagen, die werden garnich mit PHP generiert, sondern bei jedem ein Schatten druntergeworfen und extra gespeichert.

Aber man könnte das mit PHP realisieren:
Du hast 8 kleine Bilder, für die Ecken und Seiten und die werden dann um das Bild "rumgeklebt".
 
hmmm - das mit den Bilder "drumkleben klingt eigentlich ganz gut - muss ich mal probieren

aber ich habe auch schonmal eine website gesehen (leider gibbet die nicht mehr und ich finde auch den link nimmer) - die hatte ein super feature:
an konnte mit JS-genierenten Slidern den Grundfarbton der Seite einstellen und dann würden alle bilder neu berechnet - das war ziemlich krass
 
hm stimmt das scheine ich nur geträumt zu haben ;)
@rechenaufwand: eigentlich sind so ziemlich alle Image-Prozesse sehr rechenaufwendig. Aber ich denke mal B-Ginna hat nicht vor jedes Bild zur echzeit mit Schatten auszustatten sondern eher beim upload oder sowas... (zumindest hoffe ich das ;))
 
Hat jemand 'ne Ahnung, wie ich (natürlich mit PHP)

RGB in HSB und HSB in RGB umrechnen kann?

währe ziemlich hilfreich, wenn man den dropshadow berechnen lassen will :-/
 
So...

.. jetzt hab ich mir die halbe Nacht um die Ohren geschlagen -
soweit habe ich es mit dem dropshadow bereits gebracht:
http://www.juern.de/test/rgb2hsb.php

hat jemand 'ne idee, mit welchem Verfahren ich die Ecken rundbekommen könnte?
zur Info - die Farben liegen in einem Array vor:

$arrFarben[0..n][0..2]
"0..n" hängt von der Größe des Dropshadows ab (pixelmäßig) "0" ist immer die Ausgangsfarbe, "n" ist Schwarz
und 0..2 sind nur die HSB/HSL Angaben

somit ergibt sich im moment folgendes "muster" an den ecken
(für dropshadow 6 pixel)
PHP:
0 0 0 0 0
0 0 0 0 1
0 0 0 1 2
0 0 1 2 3
0 1 2 3 4

Tja, wie krieg ich das rund?
meine jetzige Berechnung (für die linke obere Ecke)sieht so aus:
$DropHSL - array mit den ganzen brechneten farben(siehe oben)
PHP:
for($i=0;$i<sizeof($DropHSL);$i++)
{
 for($j=0;$j<sizeof($DropHSL);$j++)
 {
  $curPos = (0-(sizeof($DropHSL)-1)+$i+$j);
  if($curPos <0) $curPos = 0;
  $curRGB = HSLtoRGB($DropHSL[$curPos][0],$DropHSL[$curPos][1],$DropHSL[$curPos][2]);
  // jetzt wird mit $curRGB was veranstaltet (zB imagesetpixel oder so)
 }
}


wie man sieht, ich habe es rausgefunden, wie RGB in HSB(HSL) und umgekehrt umzuwandeln ist :) - hier der Quelltext zum Testen:
PHP:
<?PHP
/*
 Title:			RGB_2_HSB_2_RGB_Converter
 Description:	Converting a given (HEX)-RGB-value into HSB and backwards
 Copyright:		Copyright © 2002, 2003
 Company:		twistdesign GbR
 Author:		Jürn-Christian Hocke
 Version:		1.0a
*/

$RGB = Array();
$HSL = 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++;
 }
}



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);
}


function HSLtoRGB($H,$S,$L) {
  $p1;
  $p2;
  $rgb = Array();
  $L/=100;
  $S/=100;
  if ($L<=0.5) $p2=$L*(1+$S);
  else $p2=$L+$S-($L*$S);
  $p1=2*$L-$p2;
  if ($S==0)
  {
    $rgb["r"] = $L;
    $rgb["g"] = $L;
    $rgb["b"] = $L;
  }
  else
  {
    $rgb["r"]=FindRGB($p1,$p2,$H+120);
    $rgb["g"]=FindRGB($p1,$p2,$H);
    $rgb["b"]=FindRGB($p1,$p2,$H-120);
  }
  $rgb["r"] *= 255;
  $rgb["g"] *= 255;
  $rgb["b"] *= 255;
  $rgb["r"]=round($rgb["r"]);
  $rgb["g"]=round($rgb["g"]);
  $rgb["b"]=round($rgb["b"]);

  $strRGB = $rgb["r"].",".$rgb["g"].",".$rgb["b"];
  return $strRGB;
}

function FindRGB($q1,$q2,$hue)
{
  if ($hue>360) $hue=$hue-360;
  if ($hue<0) $hue=$hue+360;
  if ($hue<60) return ($q1+($q2-$q1)*$hue/60);
  else if ($hue<180) return($q2);
  else if ($hue<240) return($q1+($q2-$q1)*(240-$hue)/60);
  else return($q1);
}


function RGBtoHSL($r,$g,$b)
{
  global $HSL;
  $Min=0;
  $Max=0;
  $r=($r/51)*0.2;
  $g=($g/51)*0.2;
  $b=($b/51)*0.2;
  if ($r>=$g)		$Max=$r;
  else              $Max=$g;
  if ($b>$Max)      $Max=$b;
  if ($r<=$g)       $Min=$r;
  else              $Min=$g;
  if ($b<$Min)      $Min=b;

  $HSL[2]=($Max+$Min)/2;
  if ($Max==$Min)
  {
   $HSL[1]=0;
   $HSL[0]=0;
  }
  else
  {
   if ($HSL[2] < 0.5)	$HSL[1] = ($Max-$Min)/($Max+$Min);
   if ($HSL[2] >= 0.5)	$HSL[1] = ($Max-$Min)/(2-$Max-$Min);
   if ($r==$Max)        $HSL[0] = ($g-$b)/($Max-$Min);
   if ($g==$Max)		$HSL[0] = 2+(($b-$r)/($Max-$Min));
   if ($b==$Max)		$HSL[0] = 4+(($r-$g)/($Max-$Min));
  }
                   $HSL[0] = round($HSL[0]*60);
  if($HSL[0]<0)    $HSL[0] += 360;
  if($HSL[0]>=360) $HSL[0] -= 360;
                   $HSL[1] = round($HSL[1]*100);
                   $HSL[2] = round($HSL[2]*100); // eigentliches HSB ist noch *2 - keine ahnung, warum es nur so funzt ... liegt wohl an HSL
}


$hexr = '00';
$hexg = '66';
$hexb = '99';
$decr =  HextoDec($hexr);
$decg =  HextoDec($hexg);
$decb =  HextoDec($hexb);
RGBtoHSL($decr,$decg,$decb);

make_dropshadow($HSL,20);

$newrgb = HSLtoRGB($HSL[0],$HSL[1],$HSL[2]);

echo $hexr."|".$hexg."|".$hexb."->".$decr."|".$decg."|".$decb."->".$HSL[0]."|".$HSL[1]."|".$HSL[2]."->".$newrgb;
 
wo du die Schatten schon um das Bild herumlegst, kannst du doch auch einfach 8 bilder um das Bild legen, das spart Traffic und Rechenzeit.
 
Hi,
ich mische mich hier einfach mal ein!;)

Ich bastel mir nämlich gerade auch eine PHP-Site, auf der ich Bilder aus einem bestimmten Ordner aufrufen möchte!

Ich habe da ein Script gefunden, dass die pics resized, bei Bedarf einen Rahmen uns natürlich "last but not least ;) " einen Schatten wirft. Es funzt auch alles ganz gut!

Habe nur ein Prob, mit dem ich mich schon den ganzen Tag rumschlage. Da ich nicht der grosse PHP-Crack bin, frage ich mal Euch!

Habe folgendes Script:
PHP:
<?php

if($dir=opendir('../../pics'))
{
while($file=readdir($dir))
{
if('.'==$file || '..'==$file)
continue;
if(is_dir('../../pics/'.$file))
continue;
echo "\r\n";
printf('<a href="../../pics/%s"><img src="thumb.php?img=%s" width="110" height="110" border="0" alt="%s"></a>', $file, $file, $file);
}
closedir($dir);
}

?>

Das Script funktioniert prima! Ich möchte nur nicht alle Pics aus dem Ordner, sondern nur eins. Und zwar eins mit dem Wert $bild1. Ich krieg´s einfach nicht hin. Ich weiss, dass die Schleife weg muss, habe auch alles probiert, was in meiner Macht steht!

Hoffe, Ihr könnt mir helfen!!!
Danke
 
Hi,

ich meine den Wert aus einer Datenbank, der natürlich vorher ausgelesen wurde. Das Skript soll nur das Bild mit dem Wert finden und zeigen. Nicht alle Bilder im Verzeichnis!

Gruß
 
Zurück
Oben