Imagecache legt alle Bilder unnötigerweise doppelt an
am 18.01.2010 - 17:20 Uhr in
Bei einem Projekte gibt es tausende Bilder. Ein Bild wird jeweils in einem Node angezeigt. Dort soll das Bild die Breite von 200px haben.
Von den tausenden Bildern sind der überwiegende Teil der Bilder genau mit 200px Breit abgespeichert. Man könnte diese direkt anzeigen. Da aber einige Bilder (ein paar Prozent) größer sind (500px oder 800px breit, etc), macht es Sinn, imagecache einzusetzen.
Ein Preset in Imagecache mit Skalierung auf width=205 (keine Höhe, die ist egal) sollte nun aber so funktionieren, dass nur jene Bilder, die größer als 205 Pixel breits sind von Imagecache skaliert werden und alle anderen, also die meisten die 200px breit sind, einfach direkt angezeigt werden, ohne ein Imagecache Bild zu erzeugen, da sonst tausende Bilder doppelt gespeichert werden unnötigerweise.
Egal wie man das Imagecache-Preset auch macht, anstatt die orginalen anzuzeigen, werden 1:1-Kopien von tausenden Bildern erzeugt im Imagecache-preset-Verzeichnis.
Wozu? Kann man das nicht abstellen? Wenn ein Bild schon passt, kein Scale etc von Imagecache durchgeführt wird, sollte Imagecache so schlau sein und direkt auf das Orignal verlinken anstatt das Original zuerst 1:1 zu kopieren und dann zu verlinken.
Gibt es dafür eine Lösung?
Danke.
- Anmelden oder Registrieren um Kommentare zu schreiben
Hi, vielleicht kannst du das
am 18.01.2010 - 17:29 Uhr
Hi,
vielleicht kannst du das über die Theming Funktion erreichen.
http://drupalcontrib.org/api/function/theme_imagecache/6
Wenn du hier eine weiche einbaust, die unter besonderen Umständen dann doch nur die normale URL zurück gibt, dann sollte ImageCache nicht aktiv werden. Der Trick ist ja der ReWrite des Pfades, wodurch ImageCache erst aktiv wird. Und den verhinderst du einfach.
---
Viele Grüße,
Kars-T
| comm-press
Viele Grüße,
Kars-T
If in imagecache fehlt :-)
am 18.01.2010 - 17:45 Uhr
Klar, genau so wollte ich das ja auch machen, aber mir geht es darum, eben nicht programmieren zu müssen.
Denn jeder Programmier würde ein "if .." einbauen um das Verdoppeln von tausenden Bildern zu verhindern, aber warum nur in aller Welt ist dieses if nicht in imagecache schon drinnen???
Spezieller Fall
am 18.01.2010 - 17:55 Uhr
Naja, das was du da willst, würde aber den Caching Effekt unterwandern. Du musst dann mehr Logik ausführen, jedesmal, wenn eine Bild URL aufgebaut wird. Und das ganze dann noch so allgemein gültig zu halten, das es über die GUI zu konfigurieren ist? Na ich weiß nicht und denke, das es schon so gut ist, wie es ist.
---
Viele Grüße,
Kars-T
| comm-press
Viele Grüße,
Kars-T
Wäre effizienter, schneller, sinnvoller
am 19.01.2010 - 14:05 Uhr
Es wäre nur eine einzige If-Abfrage (eventuell abschaltbar im Admin-Bereich):
- Wenn das Originalbild den Kriterien entspricht (also das Imagecache-Preset keine Änderung, keien Verkleidung, rein gar nichts bewirkt, was in vielen Fällen der Fall ist), dann das Original-Bild anzeigen. Andernfalls das Imagecache-Bild anzeigen, denn nur dann macht es Sinn dieses anzuzeigen, weil es eine andere Größe hat als das Original-Bild.
Und diese eine oder 2 Zeilen Code sind wirklich nicht viel, es ist vollkommen allgemeingültig (Originalbild bleibt Original->Original anzeigen) und das Modul imagecache enthält derzeit ganz bestimmt viele viele Zeilen Code, die aufgerufen werden, allein um festzustellen, ob eine Aktion erforderlich ist oder nicht. 2 weitere Zeilen, die das Erstellen von Tausenden 1:1 Kopien der Originalbilder verhindern würden, können da niemanden stören, weil es einfach viele Vorteile hat.
Zitat: - Wenn das
am 19.01.2010 - 14:13 Uhr
- Wenn das Originalbild den Kriterien entspricht (also das Imagecache-Preset keine Änderung, keien Verkleidung, rein gar nichts bewirkt, was in vielen Fällen der Fall ist), dann das Original-Bild anzeigen. Andernfalls das Imagecache-Bild anzeigen, denn nur dann macht es Sinn dieses anzuzeigen, weil es eine andere Größe hat als das Original-Bild.
Ich denke nicht, das das ein Zweizeiler ist, da "wenn das Preset nichts bewirkt" alles mögliche sein kann. Aber wenn ich mich irre und das so einfach ist, dann schreib doch einen Patch und alle werden es dir danken! :D
---
Viele Grüße,
Kars-T
| comm-press
Viele Grüße,
Kars-T
DrupalFan schrieb Es wäre
am 19.01.2010 - 18:37 Uhr
Es wäre nur eine einzige If-Abfrage (eventuell abschaltbar im Admin-Bereich):
Wenn du eine Bildergalerie mit 50 Einträgen pro Seite anzeigst, wären das bereits 50 IF-Abfragen. Sind diese Bilder dann noch entsprechend groß, wird unnötig viel Speicher verschwendet um zu ermitteln, ob die Bilder von Imagecache wirklich angepasst werden müssen. Wenig sinnvoll in meinen Augen.
http://www.twitter.com/bspellmeyer
Ein IF ist nicht das Thema
am 19.01.2010 - 18:41 Uhr
Leider total falsch.
Es gibt nur ein Bild in einem Node, es gibt daher nur einen IF-Aufruf. Dein Ansatz ist falsch, da dürfte man doch überhaupt keinen Code mehr schreiben, wenn man jetzt nicht mehr ein einziges IF pro Bild machen darf. Drupal besteht aus so viel redundantem Code und ist daher auch sehr langsam, hier über ein IF zu diskutieren ist nicht sinnvoll, aber man kann durchaus darüber diskutieren, wie man Drupal grundsätzlich um einen großen Faktor beschleunigen kann, das ist schon Thema.
Imagecache-Dateien nicht löschbar
am 19.01.2010 - 19:03 Uhr
Jetzt kommt auch noch dazu, dass einmal mit Imagecache erstellte Bilder nicht mehr gelöscht werden können, weil die entsprechenden Access-Rechte fehlen und nur Drupal die Dateien löschen könnte, man aber per FTP keine Chance hat.
Auch per PHP-Script ist das nicht so einfach.
Imaagecash bietet die
am 19.01.2010 - 19:05 Uhr
Imagecache bietet die Möglichkeit, alle Bilder im Cache eines Presets zu löschen. Schau mal nach Flush Preset.
http://www.twitter.com/bspellmeyer
DrupalFan schrieb Leider
am 19.01.2010 - 19:10 Uhr
Leider total falsch.
Es gibt nur ein Bild in einem Node, es gibt daher nur einen IF-Aufruf. Dein Ansatz ist falsch, da dürfte man doch überhaupt keinen Code mehr schreiben, wenn man jetzt nicht mehr ein einziges IF pro Bild machen darf. Drupal besteht aus so viel redundantem Code und ist daher auch sehr langsam, hier über ein IF zu diskutieren ist nicht sinnvoll, aber man kann durchaus darüber diskutieren, wie man Drupal grundsätzlich um einen großen Faktor beschleunigen kann, das ist schon Thema.
Auf der Übersichtsseite einer Bildergalerie werden bei mir 50 Thumbnails gleichzeitig angezeigt. Und alle Thumbnails müssen daher auch gleichzeitig geprüft werden. Das macht 50 hochauflösende Bilder, die für eine Größenermitllung in den Speicher geladen werden müssen. Bei jedem einzelnen Aufruf der Galerie. In meinen Augen immer noch nixht sinnvoll.
http://www.twitter.com/bspellmeyer
So würd ich das nicht
am 19.01.2010 - 19:22 Uhr
So würd ich das nicht machen.
DrupalFan schrieb So würd
am 19.01.2010 - 19:25 Uhr
So würd ich das nicht machen.
Was würdest du wie nicht machen? Und vor allem: Wie würdest du es machen?
http://www.twitter.com/bspellmeyer
Ich würds einfach in
am 19.01.2010 - 19:50 Uhr
Ich würds einfach in Imagecache korrekt einbauen.
Da Imagecache aber für ein
am 19.01.2010 - 20:43 Uhr
Da Imagecache aber für ein Preset eine Reihe von verschiedenen Operationen ausführen kann (z.b. 2 x Scale, 1 Crop), ist es nicht simpel festzustellen, ob das Original-Bild dem bereits entspricht. Und nur am Ende einer Bearbeitungskette weiß man, was los ist. Wenn dann noch Bearbeitungsschritte aus Imagecache-Aktions dazukommen.....
In Kürze, es ist nicht mal eben hinzubekommen und wurde deshalb weggelassen. Wenn Du was anderes möchtest, muß Du es selbst codieren. Außerdem ist nach einem ersten Aufruf des Bildes im jeweiligen Preset das Bild im Presetverzeichnis gespeichert und das Performance-Problem ist keines mehr.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *