[x_avatarresizer] Avatare beim Upload automatisch verkleinern

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • janek
    Contao-Nutzer
    • 18.04.2010
    • 19

    #1

    [x_avatarresizer] Avatare beim Upload automatisch verkleinern

    Der x_AvatarResizer erweitert die Funktionen der Avatar Erweiterung.

    Das Hauptmerkmal ist die automatische Verkleinerung von Avataren beim Upload, sofern die Größe einen frei einstellbaren Wert überschreitet. Dieser lässt sich ganz einfach in den Einstellungen in einem Textfeld festlegen. Das macht die Erweiterung "avatarsizer" unnötig.
    Die Verkleinerung kann jederzeit wieder in den Einstellungen abgeschaltet werden.

    Eine weitere kleine Änderung gibt es bei der Eingabe und Darstellung der maximal möglichen Dateigröße des Avatars: Diese wird nun in Kilobytes statt Bytes angezeigt und angegeben. Ich halte das für deutlich übersichtlicher als lange Byte Angaben.

    Das Modul steht unter der LGPL und ist im Repository zu finden.

    Da es sich hierbei um meine erste öffentliche Typolight Erweiterung handelt, würde ich mich sehr über Feedback freuen.

    Viel Spaß damit!
    Janek

    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: avatarresizer_screenshot1.jpg
Ansichten: 1
Größe: 35,1 KB
ID: 939429
    Meine ContaoErweiterungen:
    - x_AvatarResizer (Support Thread)
    - x_FrontendMultiTextWizard
  • DanielGrosse
    Contao-Nutzer
    • 29.06.2009
    • 58

    #2
    Hallo habe die die Erweiterung installiert, aber wenn ich die Seite aufrufe, in der mein Nutzer sein Bild hochladen kann, kommt die Fehlermeldung:

    Code:
    Warning: Cannot modify header information - headers already sent by (output started at /www/[...]/system/modules/x_avatarresizer/AvatarModuleExtended.php:1) in /www/[...]/system/libraries/Template.php  on line 174
    
    #0 [internal function]: __error(2, 'Cannot modify h...', '/www/[...]/w00...', 174, Array)
    #1 /www/[...]/system/libraries/Template.php(174): header('Content-Type: t...')
    #2 /www/[...]/system/modules/frontend/FrontendTemplate.php(203): Template->output()
    #3 /www/[...]/system/modules/frontend/PageRegular.php(133): FrontendTemplate->output()
    #4 /www/[...]/index.php(188): PageRegular->generate(Object(DB_Mysql_Result))
    #5 /www/[...]/index.php(292): Index->run()
    #6 {main}
    Gibt es bekannt Module, die Probleme mit diesem machen?

    Ich habe zusätzlich noch die Module:
    xtmembers
    xtmembers_fieldeditor
    auf der Seite.

    Kommentar

    • xchs
      Administrator
      • 19.06.2009
      • 14682

      #3
      Hallo DanielGrosse,

      das könnte u.U. daran liegen, dass irgendeine Datei oder Template sichtbare oder nicht sichtbare Zeichen/Leerzeichen enthält (Stichwort: UTF8-BOM usw.). Such mal hier im Forum nach dieser Fehlermeldung; das hatten wir nämlich schon ein paar Mal!
      Contao Community Administrator

      [Unterstützungsmöglichkeiten]
      sigpic

      Kommentar

      • janek
        Contao-Nutzer
        • 18.04.2010
        • 19

        #4
        Hallo DanielGrosse,

        ich denke der Tipp von xchs dürfte das Problem beheben. Ansonsten: Sind dir denn auch auf anderen Seiten solche Meldungen aufgefallen? Probier doch mal eine "Profil bearbeiten" Seite zu erstellen und deaktiviere das x_avatarresizer Modul. Wenn nun ein Benutzer sein Profil bearbeitet, gibt es dann auch eine Fehlermeldung?
        Wenn nicht, gibt es dort eine Fehlermeldung wenn du das x_avatarresizer Modul wieder aktivierst?

        Damit kannst du zumindest schon einmal ausschließen, dass es sich doch um ein Fehler der Resizer Erweiterung handelt.

        Grüße
        Janek
        Meine ContaoErweiterungen:
        - x_AvatarResizer (Support Thread)
        - x_FrontendMultiTextWizard

        Kommentar

        • DanielGrosse
          Contao-Nutzer
          • 29.06.2009
          • 58

          #5
          Der Fehler lag in der AvatarModuleExtended.php. Da waren in der ersten Zeile vor
          <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');

          mehrere Leerzeichen.

          Danke für den Tip.

          Kommentar

          • janek
            Contao-Nutzer
            • 18.04.2010
            • 19

            #6
            Oh, dann Asche auf mein Haupt: Diese Datei gehört ja zu x_avatarresizer und damit ist der Fehler nicht deine Schuld. In dieser Datei ist doch tatsächlich versehentlich ein Tabulator in die erste Zeile gerutscht... Danke für's melden!

            Ich hab die fehlerhafte Datei angepasst und die Änderung auch gleich in das Extension Repository eingepflegt. Also einfach in der Erweiterungsverwaltung aktualisieren und das Problem sollte nicht wieder vorkommen.
            Meine ContaoErweiterungen:
            - x_AvatarResizer (Support Thread)
            - x_FrontendMultiTextWizard

            Kommentar

            • janek
              Contao-Nutzer
              • 18.04.2010
              • 19

              #7
              Es gibt mal wieder eine neue stabile Version der Avatarresizer Erweiterung mit Bugfixes und einem neuen Feature:

              Da das Verkleinern von GIF Dateien dazu führt das diese eventuell vorhandene Animationen verlieren habe ich im Backend eine Checkbox hinzugefügt, welche die Verkleinerung von GIF Dateien auf Wunsch deaktiviert. Die Dateigrößenbegrenzung sowie andere Dateitypen werden davon nicht beeinflusst.
              Meine ContaoErweiterungen:
              - x_AvatarResizer (Support Thread)
              - x_FrontendMultiTextWizard

              Kommentar

              • extractjan
                Contao-Nutzer
                • 14.01.2011
                • 79

                #8
                mini bug?

                Hallo Janek,

                danke erstmal für die Erweiterung!
                Läuft super bis auf ...

                Kann es sein, daß die maximale Höhe ignoriert wird, wenn der Avatar quadratisch ist?

                Bsp: max. Breite 150, max Höhe 100,
                ein quadratisches Bild wird immer auf 150x150 skaliert....

                Würde mich da sehr über einen Tip oder Fix freuen!

                Gruß Jan

                Kommentar

                • janek
                  Contao-Nutzer
                  • 18.04.2010
                  • 19

                  #9
                  Wenn das der Fall sein sollte handelt es sich dabei tatsächlich um einen Bug. Ein 150x150 Avatar sollte bei der Einstellung "maximal" 150x100 auf 100x100 skaliert werden.

                  Ich werde das nachher mal testen.

                  Für die Skalierung werden die von Contao mitgelieferten Methoden verwendet. Wenn ich diese in der Erweiterung nicht falsch verwendet haben sollte, müssen die Probleme eventuell da gesucht werden. Wobei ich hier keine voreiligen Schlüsse ziehen möchte. Wahrscheinlich gibt es wirklich einen Bug in der Erweiterung
                  Meine ContaoErweiterungen:
                  - x_AvatarResizer (Support Thread)
                  - x_FrontendMultiTextWizard

                  Kommentar

                  • janek
                    Contao-Nutzer
                    • 18.04.2010
                    • 19

                    #10
                    Soo, ich habe das ganze jetzt einmal mit der aktuellen 2.10 RC1 Version von Contao getestet und konnte den Fehler (leider) reproduzieren.

                    Für die Verkleinerung wird die Contao eigene methode "resizeImage" verwendet, welche alle Parameter an die Methode "getImage" weitergibt. Der Methodenkopf von "getImage" sieht folgendermaßen aus:

                    PHP-Code:
                    protected function getImage($image, $width, $height, $mode='', $target=null) 
                    
                    Meine Erweiterung übergibt nun also den Pfad zur hochgeladenen Datei sowie die in den Contao Einstellungen festgelegten Werte für Höhe und Breite - also in diesem Fall 150 und 100.

                    Also "$mode" wird "proportional" übergeben. Es wäre noch "box" möglich, dann würde allerdings das Bild beschnitten werden. Wenn das jemand nutzen möchte könnte ich dies in den Contao Einstellungen per Checkbox auswählbar machen - bitte melden falls Interesse besteht.

                    Die Methode springt bei den in diesem Fall übergebenen Dimensionen in die folgende Verzweigung, sofern ein Bild der Größe "150x150" übergeben wird.

                    PHP-Code:
                    // Calculate the height if only the width is given
                    elseif ($intWidth)
                    {
                        $intHeight = ceil($objFile->height * $width / $objFile->width);
                        $strNewImage = imagecreatetruecolor($intWidth, $intHeight);
                    } 
                    
                    Dort wird die Höhe ausgerechnet: höhe = aufrunden(150 * 150 / 150) = 150

                    So kommt am Ende wieder die Höhe "150" raus - obwohl als maximale Höhe 100 eingetragen wurde.

                    Jetzt bleibt die Frage: Ist das Verhalten der Methode "getImage" seitens der Contao Entwickler so geplant und erwünscht?
                    Ich habe keine genauere Dokumentation der Methode finden können, welche Aufschluss darüber gibt was die $width und $height Parameter bewirken sollen.
                    Es ist also durchaus möglich, dass die Methode alles richtig macht und ich sie nur falsch benutze.
                    Ich bin einfach davon ausgegangen, dass es sich bei den zu übergebenden Werten um Maximalwerte handeln soll - sonst würde ja die alleinige Angabe von Breite oder Höhe reichen.

                    Bevor ich dieses Verhalten durch Änderungen an meiner Erweiterung versuche anzupassen, muss ich wissen ob das Verhalten der Methode so erwünscht ist.
                    Es wäre sehr nett, wenn sich ein Core Entwickler zu diesem Thema melden könnte

                    Ansonsten wünsche ich allen noch eine gute (Rest-) Nacht. Ich leg mich dann mal aufs Ohr

                    Gruß Janek
                    Meine ContaoErweiterungen:
                    - x_AvatarResizer (Support Thread)
                    - x_FrontendMultiTextWizard

                    Kommentar

                    • Andreas
                      Contao-Urgestein
                      • 19.06.2009
                      • 7709

                      #11
                      Hallo Janek,

                      es ist tatsächlich ein Bug in x_avatarresizer. Wenn du in AvatarWidgetExtended.php Zeile 152 den mode auf "box" stellst, dann geht es. Habe es mit landscape und portrait getestet. Das Bild wird mit "box" nicht beschnitten. Beschnitten wird mit "crop", wobei du anstelle von "crop" auch "foo" reinschreiben kannst, da "crop" nicht abgefragt wird.

                      Gruß Andreas
                      Zuletzt geändert von Andreas; 20.10.2011, 03:04.
                      Bitte!
                      Vor Anfragen im Forum HTML validieren.
                      Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

                      Vielen Dank an alle Wunschlistenerfüller
                      Andreas Burg, Web Solutions

                      Kommentar

                      • Andreas
                        Contao-Urgestein
                        • 19.06.2009
                        • 7709

                        #12
                        Zitat von janek Beitrag anzeigen

                        Dort wird die Höhe ausgerechnet: höhe = aufrunden(150 * 150 / 150) = 150

                        So kommt am Ende wieder die Höhe "150" raus - obwohl als maximale Höhe 100 eingetragen wurde.

                        Jetzt bleibt die Frage: Ist das Verhalten der Methode "getImage" seitens der Contao Entwickler so geplant und erwünscht?
                        Ich habe keine genauere Dokumentation der Methode finden können, welche Aufschluss darüber gibt was die $width und $height Parameter bewirken sollen.
                        Es ist also durchaus möglich, dass die Methode alles richtig macht und ich sie nur falsch benutze.
                        Ich bin einfach davon ausgegangen, dass es sich bei den zu übergebenden Werten um Maximalwerte handeln soll - sonst würde ja die alleinige Angabe von Breite oder Höhe reichen.

                        Bevor ich dieses Verhalten durch Änderungen an meiner Erweiterung versuche anzupassen, muss ich wissen ob das Verhalten der Methode so erwünscht ist.
                        Es wäre sehr nett, wenn sich ein Core Entwickler zu diesem Thema melden könnte
                        Ich hatte es ganz genau so analysiert wie du, noch bevor ich diesen Thread hier gelesen habe. Der Unterschied ist wahrscheinlich, dass Leo den Begriff "Maximale Breite / Höhe" nicht verwendet. Sieht so aus, als würde "proportional" auf die größte Abmessung und "box" auf die kleinste Abmessung proportional skalieren. Ich glaube Nina hat irgendwo mal versucht das zu erklären.

                        Grüße
                        Bitte!
                        Vor Anfragen im Forum HTML validieren.
                        Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

                        Vielen Dank an alle Wunschlistenerfüller
                        Andreas Burg, Web Solutions

                        Kommentar

                        • MacKP
                          Contao-Yoda
                          • 15.06.2009
                          • 13315

                          #13
                          Wie das so mit den Bildern ist kann man hier genau nachlesen: http://www.contao.org/blog-leser/ite...light-2.8.html

                          Viele Grüße
                          Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
                          [Arbeitet bei -> Paus Design & Medien]
                          "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

                          Kommentar

                          • Andreas
                            Contao-Urgestein
                            • 19.06.2009
                            • 7709

                            #14
                            Danke MacKP, genau das war's was ich im Kopf hatte. Dann stimmt meine Aussage ja mit dem tatsächlichen Verhalten überein.

                            In x_avatarresizer funktioniert das was in dem Block unter "Übrigens..." steht übrigens nicht, weil die Erweiterung versucht den Fall eines fehlenden Wertes auszugleichen, z.B. mit Werten, die über die Erweiterung avatar eingegeben wurden und jetzt nur noch in der localconfig.php zu finden sind. Aber auch wenn sie dort nicht stehen funktioniert es nicht mit nur einem Wert, selbst wenn man mandatory auf false setzt. Für meinen Geschmack etwas zu viele Überprüfungen in x_avatarresizer. Man könnte auch sofort die Methode getImage() nehmen, bei der man als letzten Parameter auch schon das Zielverzeichnis mit eingeben kann.

                            Gruß Andreas
                            Bitte!
                            Vor Anfragen im Forum HTML validieren.
                            Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

                            Vielen Dank an alle Wunschlistenerfüller
                            Andreas Burg, Web Solutions

                            Kommentar

                            • janek
                              Contao-Nutzer
                              • 18.04.2010
                              • 19

                              #15
                              Zitat von Andreas Beitrag anzeigen
                              Danke MacKP, genau das war's was ich im Kopf hatte. Dann stimmt meine Aussage ja mit dem tatsächlichen Verhalten überein.
                              Dann vielen Dank für die Klarstellung! Ich habe nun den Parameter $mode zu "box" geändert.

                              Zitat von Andreas Beitrag anzeigen
                              In x_avatarresizer funktioniert das was in dem Block unter "Übrigens..." steht übrigens nicht, weil die Erweiterung versucht den Fall eines fehlenden Wertes auszugleichen, z.B. mit Werten, die über die Erweiterung avatar eingegeben wurden und jetzt nur noch in der localconfig.php zu finden sind. Aber auch wenn sie dort nicht stehen funktioniert es nicht mit nur einem Wert, selbst wenn man mandatory auf false setzt. Für meinen Geschmack etwas zu viele Überprüfungen in x_avatarresizer.
                              Da hast du natürlich recht. Anfangs war es mir wichtig es allen "Umsteigern" von anderen Extensions möglichst leicht zu machen indem alte Einstellungen übernommen und gegebenfalls umgerechnet werden (Byte=>KByte). Ich habe das Prozedere etwas Vereinfacht bzw. angepasst. Es reicht jetzt wenn entweder die maximale Höhe ODER die maximale Breite angegeben wird.
                              Der resizeImage Methode wird nun ansonsten einfach false für einen Wert übermittelt was offenbar klaglos funktioniert.

                              Zitat von Andreas Beitrag anzeigen
                              Man könnte auch sofort die Methode getImage() nehmen, bei der man als letzten Parameter auch schon das Zielverzeichnis mit eingeben kann.
                              Da sehe ich keinen Vorteil drin. Die resizeImage() Methode benutzt einfach den einen übergebenen Pfad für Quelle und Ziel und hat den Vorteil ganz klar entweder true oder false als Rückgabewert zu haben. getImage() beendet sich ggf. auch mal mit "null". Gut das ist jetzt kein riesen Vorteil aber alleine vom Wortlaut klingt resizeImage() für mich so, als ob es die Methode der Wahl es wenn es nach leo ginge


                              Ich habe alle Änderungen soweit möglich durchgetestet kann allerdings nicht für Fehlerfreiheit garantieren. Deshalb habe ich die neue Version der Erweiterung 0.1.3 erst einmal als Beta veröffentlicht.

                              Ich wäre sehr dankbar wenn ihr diese Beta bei euch ausprobieren könntet und eventuelle Fehler rückmelden würdet!

                              Bugs und Anregungen können jetzt auf der neu eingerichteten Projektseite angegeben werden: https://redmine.artos-hosting.de/pro...xavatarresizer
                              (Ja ich weiß, wäre nicht nötig für ein Skript dieser Größe )
                              Meine ContaoErweiterungen:
                              - x_AvatarResizer (Support Thread)
                              - x_FrontendMultiTextWizard

                              Kommentar

                              Lädt...