Getimagesize VS Hardcoded

Alice

Erfahrenes Mitglied
Hallo Zusammen. :)

Ich bin gerade dabei ein Skript von mir zu optimieren (Memory, Skript-Laufzeit und allgemein den Programmierstil).

An einer Stelle im Skript muss ich die Breite und die Höhe von einigen Grafiken (bis zu 6000 Stück) auslesen und in einer sich erweiterbaren Variable speichern. Dies mache ich mit Getimagesize.

Jedoch habe ich nun folgende Idee.

PHP:
$Signs_Size = array(
   '0' => array('526','866'), 
   '1' => array('526','866'), 
   '2' => array('526','866'), 
   '3' => array('526','866'),
   '4' => array('526','866'), 
   '5' => array('526','866'), 
   '6' => array('526','866'), 
   '7' => array('526','866'),
   '8' => array('526','866'), 
   '9' => array('526','866'), 
   'A' => array('561','866'), 
   'B' => array('561','866'),
   'C' => array('561','866'), 
   'D' => array('561','866'), 
   'E' => array('561','866'), 
   'F' => array('561','866'),
   'G' => array('561','866'),
   'H' => array('561','866'), 
   'I' => array('419','866'),
   'J' => array('561','866'),
   'K' => array('561','866'), 
   'L' => array('561','866'), 
   'M' => array('561','866'),
   'N' => array('561','866'),
   'O' => array('561','866'), 
   'P' => array('561','866'),
   'Q' => array('561','866'), 
   'R' => array('561','866'),
   'S' => array('561','866'), 
   'T' => array('561','866'), 
   'U' => array('561','866'), 
   'V' => array('561','866'),
   'W' => array('561','866'),
   'X' => array('561','866'), 
   'Y' => array('561','866'), 
   'Z' => array('561','866'),
   'Ä' => array('561','866'), 
   'Ö' => array('561','866'), 
   'Ü' => array('561','866'), 
   '@' => array('94','1299'),
);

Bisher wurde eine Variable wie z.B. "ALICE" in einer Schleife Buchstaben für Buchstaben (auch Zahlen) durchgenommen und jedes mal mit Getimagesize angesprochen und ausgelesen (Höhe und Breite).

Ich habe mir nun gedacht ob es nicht eventuell besser wäre (in Bezug auf Memory, Skript-Laufzeit und allgemein den Programmierstil) sich das Getimagesize zu sparen und stattdessen die benötigten Werte aus dem Array zu ziehen.

Was sagt ihr dazu? Was wäre Effizienter?
 
Zuletzt bearbeitet:
Das kann man zwar machen, aber ich würde es nicht machen. Wenn dein Skript wirklich deshalb noch zu langsam ist, dann ist dein Skript schon sehr weit optimiert.
Wenn du es jedoch hardcoded haben willst, dann kannst du auch gleich deine Zahlen als Integer Werte speichern, da somit auch noch der Speicherbedarf sinkt (jedes Zeichen verbraucht 8 Bit, eine Ganzzahl jedoch nur 16 Bit; du sparst also 1/3 des Speichers).
 
Wie? Kannst du mir etwas näher erklären was du meinst?

Meinst du so etwas?
PHP:
...
   1 => array(526,866),
...

Wenn ja, geht das auch mit Buchstaben?
 
So in etwa, aber da die Indizes bei dir nur einzelne Zeichen sind, kannst du dort auch wieder Zeichenketten verwenden, also wie folgt:
PHP:
  # ...
  '9' => array(526, 866), 
  'A' => array(561, 866),
  # ...
 
Dann werde ich das mal erst einmal so weiter programmieren.

Danke für deine Antwort.

Hättest du eine Idee wie ich die Variable "ALICE" mit dem Array verarbeiten könnte? Also das ich dann die Gesamtbreite und die Gesamthöhe habe?

Ich habs so probiert aber es geht nicht.
PHP:
SCHLEIFE

$var = 'ALICE';
$get_size = str_replace(array_keys($Signs_Size), array_values($Signs_Size), $var[$i]);

SCHLEIFE
 
PHP:
$var    = 'ALICE';
$length = strlen($var);
$size_x = 0;
$size_y = 0;

for($i = 0; $i < $length; ++$i)
{
  $size_x += $signs_size[ $var[ $i ] ][ 0 ];
  $size_y += $signs_size[ $var[ $i ] ][ 1 ];
}
 
1. Speichere die Länge deines Arrays in einer Variablen ab (sizeof/count).
2. Lege ein Array mit 2 Felder (für Breite und Höhe an)
3. Lasse eine For-Schleife von 0 bis zu der Länge laufen (kleiner als die Länge)
4. Addiere die Breite des aktuellen Zeichens (an der Stelle $i) zum ersten Feldes des vorher angelegeten Arrays dazu, analog das Gleiche für die Höhe

Fertig

edit: oder nimm einfach die Lösung im Post über mir
 
@einfach nur crack:
Der Code funktioniert super.

Das Skript läuft leider allgemein etwas länger weil ich eine SVG ins PNG-Format konvertiere mit IMagick. Deswegen versuche ich alles so gut es geht zu optimieren.
 
Zurück