PHP GB Library / Komprimierung

ckteebe

Grünschnabel
Hallo,

ich habe da ein kleines Problem:

Ich baue per GDlib eine Paletten von
216 Farben dynamisch auf. Das ansich
ist kein Problem. Allerdings werden die
Dateien die ich abspeicher bei einer
Größe von 10*10 px ca. 600Byte gross.
Das ist ein bisschen viel. Wenn man das
gleich Bild mit Photoshop macht hat es nur
ca. 300Byte.

Letztlich werden von einer HTMLSeite
216 Bilder geladen und wenn jedes 600Byte
hat, dauert es ganz schön lange bis die
anklickbare Palette vollständig aufgebaut ist.

Hier der Code für 1 von 216 Grafiken
// ----
$myColor = substr($getColorsRows[0],1,strlen($getColorsRows[0]));
$bgColor = Hex2Rgb($myColor);
$img = ImageCreateTrueColor(10,10);
$fc = ImageColorAllocate($img,$bgColor[0],$bgColor[1],$bgColor[2]);
ImageFilledRectangle($img,0,0,10,10,$fc);
header('Content-Type: image/jpeg');
ImageJPEG($img,$myColor.'.jpg');
// '----

- $getColorsRows[0] sind die Farbwerte aus der Datenbank
- Hex2Rgb erstellt ein Array aus den drei RGB Werten
- $myColor.'.jpg' ist dann am Ende der Dateiname
zB. 003366.jpg

Diese Routine wird nur einmal beim installieren des
System (an dem ich gerade bastel) aufgerufen. Wenn die
Farbpalette also später aufgerufen wird, dann sind die
216 Dateien schon vorhanden. Nur zu gross. Wie bekomm ich
die kleiner ohne jede einzeln mit Photoshop zu bearbeiten.

Jemand einen Vorschlag?
Danke Sascha
 
ckteebe hat gesagt.:
// ----
$myColor = substr($getColorsRows[0],1,strlen($getColorsRows[0]));
$bgColor = Hex2Rgb($myColor);
$img = ImageCreateTrueColor(10,10);
$fc = ImageColorAllocate($img,$bgColor[0],$bgColor[1],$bgColor[2]);
ImageFilledRectangle($img,0,0,10,10,$fc);
header('Content-Type: image/jpeg');
ImageJPEG($img,$myColor.'.jpg');
Die Funktion ImageJPEG kann noch einiges mehr :-):
PHP:
$quali = 100;
$bname = $myColor.'.jpg';
ImageJPEG($img,$bname,$quali);
cu Bloddy
 
So, hab das mal ausprobiert :)

Jedoch gibt es bei dieser Bildgröße keinerlei
Unterschiede in der Bytegröße. Egal ob 0 oder 100 Prozent
Qualität - das bild hat nachwievor ~ 600 Byte.

Auch mit imagecreatefromjpeg wird ein Bild, dass durch
Photoshop 300 byte hat nach der bearbeitung (farbe allokieren)
wieder 600 Byte.

Noch ne Lösung? :)
Kannst es ja mal nach vollziehen indem du
dir ein Bild dieser größe kreirst. Und dann
im zweiten Versuch eines mit Photoshop erstellst
und es anschließend mit imagecreatefromjpeg einliest.

Sascha
 
PHP:
$myColor = substr($getColorsRows[0],1,strlen($getColorsRows[0]));
$bgColor = Hex2Rgb($myColor);
$img = ImageCreate(10,10);
$fc = ImageColorAllocate($img,$bgColor[0],$bgColor[1],$bgColor[2]);
ImageFilledRectangle($img,0,0,10,10,$fc);
header('Content-Type: image/png');
ImageJPEG($img,$myColor.'.png');
Erzeugt bei mir ein 83 Bytes großes Bild :)
 
Zurück