Tillmann: GD Library / Limitierung der Img-Größe?

Hallo da draußen!

Die gd-Library (http://www.boutell.com/gd/) ist standardmäßig ab PHP 4.3 integriert und bietet eine Reihe von Möglichkeiten zur Bild-Manipulation. Das finde ich toll, und mache auch Gebrauch davon.

Jetzt habe ich aber festgestellt, daß Bilder nur bis zu einer bestimmten Größe (ca. 1250 x 1250 Pixel) benutzt werden können. -> Ich spreche nicht von der Ausgabe (hier erscheint mir eine Limitation irgendwie sogar sinnvoll), sondern bereits beim internen Generieren: $SourceImage = ImageCreateFromJPEG($Url);

Das finde ich doch merkwürdig und ziemlich ärgerlich. Gibt es irgend eine Möglichkeit, diese Beschränkung zu umgehen, bzw. hat jemand andere Erfahrungen gemacht (z.B. kann mit beliebig großen Bilder umgehen)?

Ich habe das ausprobiert, es scheint wirklich zweifelsfrei an der Bildgröße zu liegen. Erst dachte ich, das liegt vielleicht am Photoshop oder so, aber dann habe ich das exakt selbe Bild mit verschiedenen Größen ausprobiert und bei ca. 1200 Kantenlänge hat's gekracht ("because it contains errors" -> sehr tolle Fehlermeldung!).

Also dann, ich bin für jeden Ratschlag dankbar,
Grüße, Tillmann.

ps: Hier noch mal etwas mehr Code, für den, den's interessiert:

<?php
header("Content-type: image/jpeg");

$Url = $HTTP_GET_VARS['Url'];

//Neues, leeres (Ziel-) Bild erstellen der Größe X-Y
$NewImage = imageCreateTrueColor (200, 200);

//Farben definieren:
$weiss = imageColorAllocate ($NewImage, 255, 255, 255);

//Quellbild einlesen
$SourceImage = ImageCreateFromJPEG($Url);

//Bildausschnitt vom Quell- ins Zielbild kopieren, dabei skalieren
//imageCopyResized (dst_im, src_im, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH)

imageCopyResized ($NewImage, $SourceImage, 0, 0, 10, 10, 150, 150, 10, 10);

//Bild ausgeben -> Qualität=95
imageJPEG($NewImage, '', 95);

//temporären Speicher leeren
imageDestroy($NewImage);
imageDestroy($SourceImage);
?>

  1. Hallo,

    [...]
    Gibt es irgend eine Möglichkeit, diese Beschränkung zu umgehen, bzw. hat jemand andere Erfahrungen gemacht (z.B. kann mit beliebig großen Bilder umgehen)?

    ich hab eben ein Bild per Upload-Formular hochgeladen, was folgende Bilddaten hat

    Höhe:        2304
    Breite:      1728
    Dateigrösse: 1,84 MB
    Farben:      24BPP

    das Bild wurde von PHP ohne Probleme verarbeitet

    mfg
    Twilo

    1. Hallo,

      ich hab eben ein Bild per Upload-Formular hochgeladen, was folgende Bilddaten hat
      [...]
      das Bild wurde von PHP ohne Probleme verarbeitet

      Äh, hochgeladen mit GD? Oder per Datei-Upload? Falls Du wirklich GD meinst, dann hast Du wohl einen großzügig eingerichteten Server ... bei mir ist das Script-Limit bei 8 MB (vgl. Antwort an Andreas https://forum.selfhtml.org/?t=101143&m=620676).

      Grüße.

      1. Hallo,

        ich hab eben ein Bild per Upload-Formular hochgeladen, was folgende Bilddaten hat
        [...]
        das Bild wurde von PHP ohne Probleme verarbeitet

        Äh, hochgeladen mit GD? Oder per Datei-Upload? Falls Du wirklich GD meinst, dann hast Du wohl einen großzügig eingerichteten Server ... bei mir ist das Script-Limit bei 8 MB (vgl. Antwort an Andreas https://forum.selfhtml.org/?t=101143&m=620676).

        ich lade das Bild per Datei-Upload hoch... und verkleiner es dann per PHP

        meine Limit's sind wie folgt

        REDIRECT_RLIMIT_AS      512000000
        REDIRECT_RLIMIT_CPU     500
        REDIRECT_RLIMIT_NPROC   500
        RLIMIT_AS               512000000
        RLIMIT_CPU              500
        RLIMIT_NPROC            500

        memory_limit gibt es bei mir in der phpinfo() ausgabe nicht
        hm...

        mfg
        Twilo

        1. Hallo Twilo,

          meine Limit's sind wie folgt

          REDIRECT_RLIMIT_AS      512000000
          REDIRECT_RLIMIT_CPU     500
          REDIRECT_RLIMIT_NPROC   500
          RLIMIT_AS               512000000
          RLIMIT_CPU              500
          RLIMIT_NPROC            500

          memory_limit gibt es bei mir in der phpinfo() ausgabe nicht
          hm...

          Tja, da scheinst Du aber Glück (?) gehabt zu haben ... Dann wurde Dein PHP wohl ohne "--enable-memory-limit" installiert. Also bei mir steht dort jedenfalls das "memory_limit" mit 8MB.

          Du hast Dein Script aber schon online laufen, nicht lokal, oder? Ansosnten wäre es wohl kein Problem, das Limits hoch zu setzen, aber als von-einem-Provider-Abhängiger kann man da wohl nichts machen ...

          Deine Angabe zu "RLIMIT_AS" usw., woher hast Du die? Ich kann da weder was mit phpinfo() noch in der PHP Funktions-Referenz finden!?

          Also, vielen Dank für die Hilfe,
          Tillmann.

          1. Hallo,

            meine Limit's sind wie folgt

            REDIRECT_RLIMIT_AS      512000000
            REDIRECT_RLIMIT_CPU     500
            REDIRECT_RLIMIT_NPROC   500
            RLIMIT_AS               512000000
            RLIMIT_CPU              500
            RLIMIT_NPROC            500

            memory_limit gibt es bei mir in der phpinfo() ausgabe nicht
            hm...

            Tja, da scheinst Du aber Glück (?) gehabt zu haben ... Dann wurde Dein PHP wohl ohne "--enable-memory-limit" installiert. Also bei mir steht dort jedenfalls das "memory_limit" mit 8MB.

            Du hast Dein Script aber schon online laufen, nicht lokal, oder? Ansosnten wäre es wohl kein Problem, das Limits hoch zu setzen, aber als von-einem-Provider-Abhängiger kann man da wohl nichts machen ...

            das Teil ist online ;-)

            Deine Angabe zu "RLIMIT_AS" usw., woher hast Du die? Ich kann da weder was mit phpinfo() noch in der PHP Funktions-Referenz finden!?

            die stehen bei mir in der phpinfo()-Ausgabe unter "Environment" und "PHP Variables"

            bei PHP Variables aber im folgenden Format
            _SERVER["RLIMIT_AS"]    512000000
            _SERVER["RLIMIT_CPU"]   500
            _SERVER["RLIMIT_NPROC"] 500
            _ENV["RLIMIT_AS"]       512000000
            _ENV["RLIMIT_CPU"]      500
            _ENV["RLIMIT_NPROC"]    500

            mfg
            Twilo

  2. Hallo!

    Jetzt habe ich aber festgestellt, daß Bilder nur bis zu einer bestimmten Größe (ca. 1250 x 1250 Pixel) benutzt werden können. -> Ich spreche nicht von der Ausgabe (hier erscheint mir eine Limitation irgendwie sogar sinnvoll), sondern bereits beim internen Generieren: $SourceImage = ImageCreateFromJPEG($Url);

    Ich würde drauf tippen dass das Scripte zu viel Speicher verbraucht: http://de3.php.net/manual/de/ini.sect.resource-limits.php.

    Ich habe das ausprobiert, es scheint wirklich zweifelsfrei an der Bildgröße zu liegen. Erst dachte ich, das liegt vielleicht am Photoshop oder so, aber dann habe ich das exakt selbe Bild mit verschiedenen Größen ausprobiert und bei ca. 1200 Kantenlänge hat's gekracht ("because it contains errors" -> sehr tolle Fehlermeldung!).

    Woher kommt denn die Fehlermeldung? Falls Dein PHP-Script dem Browser einen Content-Type Header sendet, der diesen ein Bild erwarten lässt, PHP stattdessen aber plain-text sendet (Fehlemeldung), hat der Browser halt ein Problem. Guck mal in den Quelltext oder sende mal explizit Content-Type text/plain!

    Grüße
    Andreas

    --
    SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
    1. Hallo Andreas,

      Ich würde drauf tippen dass das Scripte zu viel Speicher verbraucht.

      oder sende mal explizit Content-Type text/plain!

      Hmmm, richtig getippt. Danke für den Hinweis. Das Script frißt tatsächlich sehr viel Speicher! Und der Plain-Text Fehlermeldung nach stehen mir genau 8 MB zur Verfügung. GD schreibt also wohl das Bild in den Cache, und wenn dieses dann 1300*1300*24 Bit (also 4,8 MB) hat und noch mal wieder umgespeichert wird, dann kommen die über 8 MB wohl zusammen.

      So ein Mist ... grummel, grummel.

      Jetzt müßte ich das Script dazu bringen, nur den von mir später gewünschten Ausschnitt zu laden. Aber da geht wohl nur ein "imagecreatefromgd2part", und das arbeitet mit Rohdaten ...

      Irgendwer eine bessere Idee (vgl. ursprüglichen Code ...).

      Danke, Tillmann.

      1. Hi!

        Hmmm, richtig getippt. Danke für den Hinweis. Das Script frißt tatsächlich sehr viel Speicher! Und der Plain-Text Fehlermeldung nach stehen mir genau 8 MB zur Verfügung.

        Ja, das ist der Standardwert.

        GD schreibt also wohl das Bild in den Cache, und wenn dieses dann 1300*1300*24 Bit (also 4,8 MB) hat und noch mal wieder umgespeichert wird, dann kommen die über 8 MB wohl zusammen.

        Naja, das lässt sich vermutlich nicht ganz so einfach berechnen, PHP macht ja noch andere Sachen als die rohen Bild-Daten in den Speicher zu schreiben...

        Jetzt müßte ich das Script dazu bringen, nur den von mir später gewünschten Ausschnitt zu laden. Aber da geht wohl nur ein "imagecreatefromgd2part", und das arbeitet mit Rohdaten ...

        Wüßte nicht wie das funktionieren sollte.

        Irgendwer eine bessere Idee (vgl. ursprüglichen Code ...).

        Du könntest "memory_limit" hochsetzen. Oder Du verwendest ein externes Programm wie ImageMagick (convert) über die Kommandozeile.

        Grüße
        Andreas

        --
        SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
        1. Hallo!

          [...] dann kommen die über 8 MB wohl zusammen.
          Naja, das lässt sich vermutlich nicht ganz so einfach berechnen, [...]

          Wahrscheinlich nicht, sollte (mir) nur die Größenordnung veranschaulichen ;)

          Irgendwer eine bessere Idee (vgl. ursprüglichen Code ...).

          Du könntest "memory_limit" hochsetzen.

          Tja, leider bin ich nicht mein eigener Administrator ... da hätte mein Provider wohl etwas dagegen ...

          Oder Du verwendest ein externes Programm wie ImageMagick (convert) über die Kommandozeile.

          Hm, war irgendwann schon mal auf der Seite ... hatte gar nicht gesehen,  daß es das auch als PHP-Script gibt. Ich habe mir das Programm mal heruntergeladen. Nun sieht es so aus, als müßte ich es installieren, bzw. die heruntergeladenen Dateien in "PHP_SRC_DIR/ext/" kopieren und dann kompilieren (?). Nun, wie gesagt, ich habe keine Admin-Rechte, sondern bin nur normaler Webspace-Mieter. Folglich habe ich auch keinen Zugriff auf die PHP-Installation. ;(

          Also, vielleicht irgend einen anderen Vorschlag? Gibt es ImageMagick vielleicht auch ohne Installation als PHP-Script?

          Zur Info: Was ich eigentlich machen will, ist ein interaktiver Online-Stadtplan-/Karten-Viewer mit JavaScript und PHP (nur für Bildproduktion). Ich habe da ein paar Funktionen geschrieben, und es funktioniert auch soweit ganz gut (im ersten Rohbau). Der Benutzer klickt beispielsweise auf "Norden" und dann wird das Bild (und nur dieses) mit entsprechend anderem Ausschnitt (aus dem gorßen Gesamtbild, meine 1500²Px) nachgeladen. Vorteil meines Scriptes sollte sein, daß keine serverseitige Konfiguration nötig ist (z.B. umfangreiche Installation eines WebMapServers ...).

          Grüße, Tillmann.

          1. Hallo!

            Irgendwer eine bessere Idee (vgl. ursprüglichen Code ...).

            Du könntest "memory_limit" hochsetzen.

            Tja, leider bin ich nicht mein eigener Administrator ... da hätte mein Provider wohl etwas dagegen ...

            Das kann ich Dir nicht sagen, jedenfalls kannst Du diese Option auch durch ini_set() im Script verändern.

            Oder Du verwendest ein externes Programm wie ImageMagick (convert) über die Kommandozeile.

            Hm, war irgendwann schon mal auf der Seite ... hatte gar nicht gesehen,  daß es das auch als PHP-Script gibt.

            Wäre mir nicht bekannt dass es das gibt. Es gibt eine PECL-Extension (beta), was Dir aber vermutlich genausowenig bringt.

            Ich habe mir das Programm mal heruntergeladen. Nun sieht es so aus, als müßte ich es installieren, bzw. die heruntergeladenen Dateien in "PHP_SRC_DIR/ext/" kopieren und dann kompilieren (?). Nun, wie gesagt, ich habe keine Admin-Rechte, sondern bin nur normaler Webspace-Mieter. Folglich habe ich auch keinen Zugriff auf die PHP-Installation. ;(

            Allerdings haben einige Provider ImageMagick bereits installiert, so dass Du convert mit den  PHP-Funktionen zur Programmausführung verwenden kannst.

            Zur Info: Was ich eigentlich machen will, ist ein interaktiver Online-Stadtplan-/Karten-Viewer mit JavaScript und PHP (nur für Bildproduktion). Ich habe da ein paar Funktionen geschrieben, und es funktioniert auch soweit ganz gut (im ersten Rohbau). Der Benutzer klickt beispielsweise auf "Norden" und dann wird das Bild (und nur dieses) mit entsprechend anderem Ausschnitt (aus dem gorßen Gesamtbild, meine 1500²Px) nachgeladen. Vorteil meines Scriptes sollte sein, daß keine serverseitige Konfiguration nötig ist (z.B. umfangreiche Installation eines WebMapServers ...).

            Dafür ist es sehr, sehr ineffizient. Für sowas sind wohl eher Vektor-Grafiken geeignet, wie es die meisten vergleichbaren Tools verwenden.

            btw: Woher hast Du denn das Kartenmaterial? Ich erinnere mich daran dass es da mal ne Menge Theater gab... http://www.google.de/search?hl=de&c2coff=1&q=stadtplan+abmahnung&btnG=Suche&meta=

            Grüße
            Andreas

            PS: http://www.krazydad.com/colrpickr/index.php?group=flickrcentral

            --
            SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
            1. Hallo Andreas!

              Danke erst mal für die flinke Antwort und die Menge an Links!!!

              [...] jedenfalls kannst Du diese Option auch durch ini_set() im Script verändern.

              Hmm, hört sich gut an, aber das scheint nicht zu funktionieren. Ich bekommen ein "false" zurück, wenn ich aufrufe:

              $changeMemLim = ini_set ("memory_limit", "12M");

              -> Oder habe ich da was falsch gemacht?

              Allerdings haben einige Provider ImageMagick bereits installiert,[...]

              Meiner wohl nicht ... Und ich bin mir nicht sicher, ob das überhaupt mein Speicherproblem lösen würde ... ?

              [...] Es gibt eine PECL-Extension (beta), was Dir aber vermutlich genausowenig bringt.

              Hmm, war ich auch vorhin drauf gestoßen, aber wie gesagt, das wird mir wohl nichts bringen ... ;(

              Dafür ist es sehr, sehr ineffizient. Für sowas sind wohl eher Vektor-Grafiken geeignet, wie es die meisten vergleichbaren Tools verwenden.

              Nunja, bei Vektorgraphiken habe ich dann das Problem, was alle bekannten Kartendienste mit ihren WebMapServer haben: die Karte sehen einfach nich "schön" aus, keine geschwungenen Kurven, etc, halt ohne die Vorteile eines vernünftigen Graphikprogrammes. Außerdem wollte ich auch Orthophotos verwenden, das sind nun mal Rasterdaten.

              btw: Woher hast Du denn das Kartenmaterial? Ich erinnere mich daran dass es da mal ne Menge Theater gab...

              Also, das ist eine Studienarbeit für eine Gemeinde hier in Baden-Würtemberg. Die Daten haben wir beim LVA gekauft, den momentanen Stadtplan hat ein Graphik-Studio gemacht. Aber glücklicherweise bin ich Kartograph :) und so würde ich den Stadtplan selber produzieren (hatte auch eine Vorlesung in Urheberrecht ... ). Bei den Orthophotos bin in mir bezüglich der Online-Reproduktions-Lizenzen nicht so sicher - aber darum müßte sich dann mein Prof. oder die Gemeinde kümmern, schließlich bin ich noch im Versuchs-Stadium, da dürfte es keine Probleme geben.

              Also dann, viele Grüße, Tillmann.

              1. Hello,

                [...] jedenfalls kannst Du diese Option auch durch ini_set() im Script verändern.

                Hmm, hört sich gut an, aber das scheint nicht zu funktionieren. Ich bekommen ein "false" zurück, wenn ich aufrufe:

                $changeMemLim = ini_set ("memory_limit", "12M");

                Wenn der Safe_mode aktiv ist, get es nicht und wenn der Provider die Speiochergrenze in einer anderen Schicht bereits mit "php_admin_value" eingestellt hat, dann geht es auch nicht mehr.

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. Hallo,

                  Wenn der Safe_mode aktiv ist, get es nicht und wenn der Provider die Speichergrenze in einer anderen Schicht bereits mit "php_admin_value" eingestellt hat, dann geht es auch nicht mehr.

                  I see ... zu schade. Wäre irgendwie auch zu einfach gewesen.

                  Dann bleibt wohl nur noch, mit Kacheln zu arbeiten, d.h. die große Graphikdatei in Teile zerschneiden, dann die entsprechend benötigten Teile herausfinden, einzelnd auslesen und hinterher wieder zusammenzufügen ...

                  Das wird eine Reihe von Stunden an Programmierung kosten, schätze ich mal. ;(

                  Aber dafür könnte ich dann mit beliebig großen Daten umgehen. Hatte ich eh schon mal angedacht (für die Orthophotos, die sind bereits in Kacheln vorhanden). Ist dann aber natürlich nicht mehr so einfach zu handeln, wenn ich die Graphik erst mal "manuell" zerstückeln muß und georeferenzieren und pp.

                  Da sitzt nicht zufällig jemand da draußen vorm PC und hat so etwas schon mal gemacht und könnte ein paar Quell-Code-Tips geben???

                  Also dann Grüße in den Harz & Danke,
                  Tillmann.

                  1. Hello,

                    Da sitzt nicht zufällig jemand da draußen vorm PC und hat so etwas schon mal gemacht und könnte ein paar Quell-Code-Tips geben???

                    Das ist so speziell, dass es wirklich Geld kosten wird. Ich habe auch bisher nichts gefunden.

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                    1. Hallo auch,

                      Das ist so speziell, dass es wirklich Geld kosten wird. Ich habe auch bisher nichts gefunden.

                      Geld oder Nerver und/oder Zeit ... ;>

                      Grüße, Tillmann.

                      ps: Falls Du noch was in die Richtugn findest, laß es mich wissen! Danke. Tillmann.

                      1. Hello,

                        Das ist so speziell, dass es wirklich Geld kosten wird. Ich habe auch bisher nichts gefunden.

                        Geld oder Nerver und/oder Zeit ... ;>
                        ps: Falls Du noch was in die Richtugn findest, laß es mich wissen! Danke. Tillmann.

                        Du kannst Dich doch schon mal mit den gängigen Grafikfomaten auseinandersetzen bezüglich der partiellen Dekompriomierbarkeit. Wenn die nämlich nicht funktioniert, wird Dir keines der Tools helfen können. Jedes müsste die Datei dann erst vollständig Dekomprimieren und gezielt nach Koordinaten einen Teil herausschneiden zu können.

                        Die GD-Lib benötigt

                        • Platz für die Datei
                        • viel Platz für die entpackte Darstellung
                        • etwas Platz für die Programmausfühung
                        • je nach Zielformat Platz auch dafür
                          ...

                        Harzliche Grüße aus http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau
                        1. Hallo,

                          [...] partiellen Dekompriomierbarkeit [...] Jedes müsste die Datei dann erst vollständig Dekomprimieren [...]

                          Hm, daran hatte ich nun überhaupt nicht gedacht ... Dann wird's da wohl kein Programm/Script geben !?!

                          Ich hatte eigentlich auch nicht vor, ein Script zu schreiben, das so etwas machen kann. Sondern eher wollte ich von vorneherein die (große) Graphik in Teile = Dateien (z.B. á 500x500 Px) zerteilen und dann nur diejenigen Kacheln = Dateien auslesen, die in einem bestimmten Koordinaten-Bereich liegen. Den gewünschten Ausschnitt jeder Kachel dann in mein Ziel-Image kopieren und den anderen Speicher wieder freisetzen. Aber auch das will erst mal getippt werden ... Da sehe ich schon eine ganze Reihe von Problemen.

                          Grüße,
                          Tillmann.

                          1. Hello,

                            Ich hatte eigentlich auch nicht vor, ein Script zu schreiben, das so etwas machen kann. Sondern eher wollte ich von vorneherein die (große) Graphik in Teile = Dateien (z.B. á 500x500 Px) zerteilen und dann nur diejenigen Kacheln = Dateien auslesen, die in einem bestimmten Koordinaten-Bereich liegen. Den gewünschten Ausschnitt jeder Kachel dann in mein Ziel-Image kopieren und den anderen Speicher wieder freisetzen. Aber auch das will erst mal getippt werden ... Da sehe ich schon eine ganze Reihe von Problemen.

                            Dafür benötigst Du dann eben einen Server, der das in "Lohnarbeit" für Dich macht, oder musst es eben auf einem entsprechenden Client machen. Dafür gibt es auch schon Share- oder Freewarepramme.

                            Ich aheb mir da mal "ShoeString's PictureDicerTM for Windows" von rigendwo heruntergeladen. Musst Du mal ein bisschen googlen. Und für die Aufgabe von neulich habe ich ein PHP-Script geschrieben, und für das Script den Speicher hochgesetzt auf 128MB. Das darf natürlich nur gelegentlich durch den Admin benutzt werden. Wenn es durch Userzugriffe zu einer solchen Speicherbelastung kommen könnte, würde der Server stehenbleiben.

                            Harzliche Grüße aus http://www.annerschbarrich.de

                            Tom

                            --
                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                            Nur selber lernen macht schlau
                            1. Hello,

                              habe noch einen Link dazu gefunden http://www.ziplink.net/~shoestring/dicer01.htm

                              Harzliche Grüße aus http://www.annerschbarrich.de

                              Tom

                              --
                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                              Nur selber lernen macht schlau
                            2. Hi!

                              Dafür benötigst Du dann eben einen Server, der das in "Lohnarbeit" für Dich macht, oder musst es eben auf einem entsprechenden Client machen. Dafür gibt es auch schon Share- oder Freewarepramme.

                              Du bringst mich auf Ideen ...

                              Ich würde das nun einfach "händisch" mit Photoshop o.ä. machen, und dann ist das Image halt zerschnitten und liegt in Teilen auf dem Server rum.

                              Grüße & gutes Nächtle,
                              ich werde mal drüber schlafen,
                              Tillmann.

                              1. Hello,

                                Du bringst mich auf Ideen ...

                                Das Schnippel-Script habe ich fertig. Es fragt, wie groß die Teile werden dürfen und berechnet dann die nächste passende Teilung mit kleinstem Fehlerausgleich (Rand) dafür. Die Kartenteile hier haben noch unterschiedliche X/Y-Abmessungen. Das ist aber nicht so sehr geschickt.

                                Harzliche Grüße aus http://www.annerschbarrich.de

                                Tom

                                --
                                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                Nur selber lernen macht schlau
                                1. Hallo,

                                  Das Schnippel-Script habe ich fertig. Es fragt, wie groß die Teile werden dürfen und berechnet dann die nächste passende Teilung mit kleinstem Fehlerausgleich (Rand) dafür. Die Kartenteile hier haben noch unterschiedliche X/Y-Abmessungen. Das ist aber nicht so sehr geschickt.

                                  Äh, bravo! Damit hätte ich nun nicht gerechnet ... könntest Du es mir vielleicht zukommen lassen? Das wäre sehr nett. Ich habe mich gestern um Navigations-Funktionen gekümmert und die Sache mit den Kacheln erst mal auf Eis gelegt ... Bin also noch nicht weiter gekommen.

                                  Wie genau geht Dein Script denn dabei vor? Bin neugierig ...

                                  Also dann, viele Grüße & Dank,
                                  Tillmann.

                                  1. Hello,

                                    Äh, bravo! Damit hätte ich nun nicht gerechnet ... könntest Du es mir vielleicht zukommen lassen? Das wäre sehr nett. Ich habe mich gestern um Navigations-Funktionen gekümmert und die Sache mit den Kacheln erst mal auf Eis gelegt ... Bin also noch nicht weiter gekommen.

                                    Wie genau geht Dein Script denn dabei vor? Bin neugierig ...

                                    Ich muss erstmal schauen, wo ich es denn nach dem Versuch überhaupt geparkt habe. Scheint irgendwie der Unordnung der letzten Wochen zum Opfer gefallen zu sein. Eine vorletzte Vesion habe ich aber gefunden. Die berücksichtigt aber noch nicht die gleichen Abmessungen für X und Y.

                                    Das hat sich aber bewährt beim Navigieren.

                                    Harzliche Grüße aus http://www.annerschbarrich.de

                                    Tom

                                    --
                                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                    Nur selber lernen macht schlau
                          2. Hi!

                            Aber auch das will erst mal getippt werden ... Da sehe ich schon eine ganze Reihe von Problemen.

                            Vor allem an den "Schnittstellen", wenn Du einen Ausschnitt haben willst der eigentlich über 2, 3 oder sogar alle 4 Teile geht, brauchst Du am Ende noch mehr Speicher als vorher ;-)

                            Grüße
                            Andreas

                            --
                            SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
                            1. Hello,

                              Aber auch das will erst mal getippt werden ... Da sehe ich schon eine ganze Reihe von Problemen.
                              Vor allem an den "Schnittstellen", wenn Du einen Ausschnitt haben willst der eigentlich über 2, 3 oder sogar alle 4 Teile geht, brauchst Du am Ende noch mehr Speicher als vorher ;-)

                              Nein. Siehe hierzu http://www.harzzeitung.de/maps/showmap.php#ID8.8

                              Wenn ich aus der Karte nur einen Ausschnitt will, dann kann ich mir die vier oder neun Quadrate zusammenbauen und daraus dann schneiden. Das benötigt dann nur einen Bruchteil des Speichers, als wenn ich alle 18*18 (oder wieviele das eben sind) laden müsste.

                              Harzliche Grüße aus http://www.annerschbarrich.de

                              Tom

                              --
                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                              Nur selber lernen macht schlau
                              1. Hallo,

                                Nein. Siehe hierzu http://www.harzzeitung.de/maps/showmap.php#ID8.8

                                Wenn ich aus der Karte nur einen Ausschnitt will, dann kann ich mir die vier oder neun Quadrate zusammenbauen und daraus dann schneiden. Das benötigt dann nur einen Bruchteil des Speichers, als wenn ich alle 18*18 (oder wieviele das eben sind) laden müsste.

                                Genau so hatte ich mir das gedacht. Nur das mein Frontend etwas hübscher aussehen sollte (ähm, Verzeihung, aber die Karte auch ;) ).

                                Und im Beispiel oben muß ich ja doch die ganze Karte laden und nicht nur den Ausschnitt, den ich gerade haben möchte ... Da gäbe es also zumindest mal einen potentiellen Weiter-Verwender für mein Script, wenn es denn mal fertig werden sollte ...

                                Grüße,
                                Tillmann.

                                1. Hello,

                                  Genau so hatte ich mir das gedacht. Nur das mein Frontend etwas hübscher aussehen sollte (ähm, Verzeihung, aber die Karte auch ;) ).

                                  Ist ja auch nur ein Arbeitsmodell für die Anker-Funktion.

                                  Harzliche Grüße aus http://www.annerschbarrich.de

                                  Tom

                                  --
                                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                  Nur selber lernen macht schlau
                2. Hallo!

                  [...] jedenfalls kannst Du diese Option auch durch ini_set() im Script verändern.

                  Hmm, hört sich gut an, aber das scheint nicht zu funktionieren. Ich bekommen ein "false" zurück, wenn ich aufrufe:

                  $changeMemLim = ini_set ("memory_limit", "12M");

                  Hm - wenn ich bei meinem Provider (php-cgi, 4.3.10) folgendes versuche:

                  <?php
                  var_dump(ini_Set('memory_limit','100M'));
                  var_dump(ini_Set('memory_limit','200M'));
                  phpinfo();
                  ?>

                  Dann habe ich da am Ende in phpinfo() stehen:

                  Directive: memory_limit
                  Local Value: 200M
                  Master Value: 50M

                  Welche PHP-Version hast Du denn? Es kann sein dass das so (PHP_INI_ALL) erst seit 4.2.0 funktioniert. Was hast Du denn für eine Server-API?

                  Wenn der Safe_mode aktiv ist, get es nicht

                  Das fände ich auch logisch, aber wo steht das dokumentiert? Hast Du da nen Link? Außerdem müßte dann ja auch eine entsprechende Safe-Mode Warnung ausgegeben werden.

                  und wenn der Provider die Speiochergrenze in einer anderen Schicht bereits mit "php_admin_value" eingestellt hat, dann geht es auch nicht mehr.

                  Werden nicht globalere Werte von lokalen Werten überschrieben? Werte die nicht überschrieben werden sollen kann man entsprechend lokal nicht verändern. Abgesehen davon funktioniert das ja nur bei mod_php - entsprechend also bei den meisten Providern nicht. Diese verwenden AFAIK andere Mittel um die Resourcen für Scripte zu beschränken.

                  Grüße
                  Andreas

                  --
                  SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
                  1. Hallo!

                    Hm - wenn ich bei meinem Provider (php-cgi, 4.3.10) folgendes versuche:

                    <?php
                    var_dump(ini_Set('memory_limit','100M'));
                    var_dump(ini_Set('memory_limit','200M'));
                    phpinfo();
                    ?>

                    Dann habe ich da am Ende in phpinfo() stehen:

                    Directive: memory_limit
                    Local Value: 200M
                    Master Value: 50M

                    Und bei mir ändert sich da 0,nix ...

                    Welche PHP-Version hast Du denn? Es kann sein dass das so (PHP_INI_ALL) erst seit 4.2.0 funktioniert. Was hast Du denn für eine Server-API?

                    Mein Account läuft über einen "Apache 2.0 Handler" Server-API, System ist Linux ("h49856 2.4.25 #3 SMP"), die PHP Version ist 4.3.3.
                    Ich schicke mal einen Link, was mein phpinfo() ausgibt, wenn Du nicht dagegen hast (an die angegebene E-Mail-Adresse).

                    [Die anderen Fragen/Antworten bezogen sich auf Tom's Posting ...]

                    Also dann, vielleicht entdeckst Du ja, woran es ligen könnte ...

                    Viele Grüße,
                    Tillmann.

                    1. Hi!

                      var_dump(ini_Set('memory_limit','200M'));
                      phpinfo();

                      Und bei mir ändert sich da 0,nix ...

                      Ich hab mir das grade auf nem anderen Server mit mod_php mal angesehen, es liegt tatsächlich am safe_mode, sobald der aktiviert wird, gibt obiger Funktionsaufruf FALSE zurück. Wie gesagt, in der Doku kann ich dazu nichts finden. Zur Not musst Du ein größeres Hosting-Paket wählen (falls es da mehr Speicher gibt), oder den Provider wechseln (konkret nach memory_limit und/oder safe_mode fragen!).
                      Oder Du kannst es halt extern per ImageMagick über Perl bzw. "convert" machen (zur Not nachfragen).

                      Grüße
                      Andreas

                      --
                      SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
                      1. Hallo!

                        Oder Du kannst es halt extern per ImageMagick über Perl bzw. "convert" machen (zur Not nachfragen).

                        Also zur Not werde ich das Bild dann Zerstückeln ...

                        Aber nur noch mal nachgefragt, um ganz sicher zu gehen: Um ImageMagick in irgend einer Weise auf meiner HP nutzen zu können, muß ich es installieren (und das kann/darf ich nicht, weil mir der Zugriff fehlt als Webspace-Mieter). Stimmt's? Und es gibt auch nicht irgend ein CGI-Programm, das so etwas erledigen würde ... Ich kenne mich da ehrlich gesagt nicht so gut aus ...

                        Viele Grüße,
                        Tillmann.

                        1. Hallo!

                          Aber nur noch mal nachgefragt, um ganz sicher zu gehen: Um ImageMagick in irgend einer Weise auf meiner HP nutzen zu können, muß ich es installieren (und das kann/darf ich nicht, weil mir der Zugriff fehlt als Webspace-Mieter). Stimmt's? Und es gibt auch nicht irgend ein CGI-Programm, das so etwas erledigen würde ... Ich kenne mich da ehrlich gesagt nicht so gut aus ...

                          ABer Du hast bereits sicher getestet dass es nicht vorhanden ist, ja? Für perl/cpan gibt es ein entsprechendes Modul, dass muss aber auch installiert sein, aber vielleicht ist das ja da. Mein Provider hat schon das ein oder andere auf Anfrage installiert, also Fragen ;-)

                          Grüße
                          Andreas

                          --
                          SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
                      2. Hello,

                        Ich hab mir das grade auf nem anderen Server mit mod_php mal angesehen, es liegt tatsächlich am safe_mode, sobald der aktiviert wird, gibt obiger Funktionsaufruf FALSE zurück. Wie gesagt, in der Doku kann ich dazu nichts finden. Zur Not musst Du ein größeres Hosting-Paket wählen (falls es da mehr Speicher gibt), oder den Provider wechseln (konkret nach memory_limit und/oder safe_mode fragen!).

                        Das hat auch mal irgendwann in der der Doku dringestanden, als die Deutsche Version noch nicht weiter vorne war als die englische. Speziell zu den INI-Einstellugnen hat die deutsche Version im Moment Vorsprung. Leider sind auch ein paar Hinweise verschluckt worden.

                        Harzliche Grüße aus http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau
                        1. Hi!

                          Das hat auch mal irgendwann in der der Doku dringestanden, als die Deutsche Version noch nicht weiter vorne war als die englische.

                          Sowas habe ich ja noch nie gesehen ;-)

                          Speziell zu den INI-Einstellugnen hat die deutsche Version im Moment Vorsprung.

                          Hm? Was meinst Du? Die Liste der Direktiven bei ini-set? Die wurden bei der englischen ja in den Appendix ausgelagert und sind "den deutschen" zumindest zahlenmäßig überlegen ;-)

                          Leider sind auch ein paar Hinweise verschluckt worden.

                          Ich glaube zwar dass ich irgendwas in der Richrtung mal gelesen habe, wollte es aber nicht beschwören - naja, ändert nichts an der Tatsache dass es so ist ;-)

                          --
                          SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
          2. Du könntest "memory_limit" hochsetzen.

            Tja, leider bin ich nicht mein eigener Administrator ... da hätte mein Provider wohl etwas dagegen ...

            Das Problem hatte ich auch bei S+P. Ich hab das Grafik bearbeitende Script dann in Perl geschrieben. Vielleicht ist das auch eine Option für dich?

  3. Hello,

    nach einer solchen Lösung habe ich neulich auch schon mal gesucht.
    Ich habe dann eine Krücke gewählt. Mit einmaligem Speicher-Hochsetzen nach dem Hochladen (bzw. für das Arbeitsverzeichnis) das Bild geladen und zerschnitten in lauter gleich große Teilbilder. Die kann man dann ja nach gewünschtem Ausschnitt wieder zusammensetzen und daraus dann den Ausschnitt erstellen. Das funktioniert dann auch mit dem "kleinen" Arbeitsspeicher.

    Ich suche aber auch noch nach Möglichkeiten, Bilder per DiskAccess zu zwerschnippeln. Man könnte es ja auch mal selber programmieren, sofern die Bildformate das hergeben. Das habe ich noch nicht überprüft, ob eine partielle Dekompimierung von GIF, PNG und JPG möglich ist, oder ob das Bild immer im Ganzen dekomprimiert werden muss.

    http://harzzeitung.de/maps/showmap.php#ID8.8

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau