Kan man ändra bildstorlek med PHP?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • kluringen
    Medlem
    • 2011-07-16
    • 201

    #1

    Kan man ändra bildstorlek med PHP?

    Om jag ska tillåta uppladdning av bilder, vill jag kunna skala ner bilderna till "lagom" format innan jag sparar dem på fil. Går det?
    Mvh
  • @nders
    Moderator
    Marsvin
    • 2000-06-30
    • 26914

    #2
    Ja.


    @aviddevguy

    Comment

    • jme
      Medlem
      • 2001-05-07
      • 1967

      #3
      Kika på https://github.com/avalanche123/Imagine

      Manual finns att läsa på http://imagine.readthedocs.org/en/latest/index.html
      Min blogg | Mina böcker

      Comment

      • walter groupius
        Medlem
        • 2004-07-30
        • 230

        #4
        Php GD eller något pluginprogram. Enklast med gd dock.
        roliga filmer, boka hotell, konferens, bilder, Spa

        Comment

        • kluringen
          Medlem
          • 2011-07-16
          • 201

          #5
          Hej alla hjälpsamma duktiga forumvänner!

          Är på väg att ge upp det här med bilder, har kört fast redan i det första steget. Mitt program laddar bara upp bilder som jag har skalat ner manuellt.
          Gränssnittet mot Tinymce:
          PHP Code:
          <?php session_start();?>
          <!DOCTYPE html>
          <html>
          <head >
          
          <meta charset="UTF-8">
          <meta name="robots" content="noindex, nofollow"> 
          
          <link rel="stylesheet" href="stilmall.css" type="text/css" />
          
          <style type="text/css">
          </style>
          
          <title>info</title>
          
          <script type="text/javascript" src="js/tiny_mce/tiny_mce.js"></script>
              <script type="text/javascript">
              tinyMCE.init({
              mode : "textareas",
              language : "sv",
              theme : "advanced",
              theme_advanced_buttons1 : "bold,italic,underline,strikethrough,fontselect,fontsizeselect,|,forecolor,undo",
              theme_advanced_buttons2 : "",
              theme_advanced_buttons3 : "",
              theme_advanced_toolbar_location : "top",
              theme_advanced_toolbar_align : "left",
              content_css : "stilmall.css",
              theme_advanced_font_sizes : "Liten=12px, Normal=16px, Stor=20px",
              forced_root_block : '',
              force_br_newlines : true,
              force_p_newlines : false
              });
              </script>
          
          </head>
          
          <body>
          <?php $_SESSION['sida'] = 'z-edit.php'; 
          $_SESSION['version'] = 0;
          $_SESSION['visa'] = " ";
          ?>
          <?php include ("menylista.php"); ?>
          
          <div id="storruta">
          
          <h1>Uppdatering av webbsidor</h1>
          <div id="knapp3">
          <form id="avbryt" name="avbryt" action="z-cancel.php">
          <input type="submit" name="submit" id="submit" value="Avbryt" />
          </form>
          </div>
          
          <div id="knapp">
          <form id="bild" name="bild" action="z-utforska.php">
          <input type="submit" name="submit" id="submit" value="Ladda" />
          </form>
          
          </div> 
          
          <form id="textfil" name="textfil" method="post" action="z-skriv.php">
          <fieldset>
          <textarea  name="gruppsida" id="gruppsida" cols="65" rows="20"><?php 
          $filnamn = $_SESSION['filnamn'];
          $file = fopen($filnamn, "r");
          $innehall = fread($file, filesize ($filnamn));
          $_SESSION['sparversion'] = $innehall;
          echo $innehall;
          fclose($file);?>
          </textarea> <p>
          
          <!--<label for="submit"></label> -->
          <input type="submit" name="submit" id="submit" value="Spara" />
          </fieldset>
          </form>
          <p>
          <a href="z-restore.php"><span class="storre">Hämta en sparad version</span></a>
          </div>
          </body>
          </html>
          Öppnar clientens utforskare:
          PHP Code:
          <?php session_start();?>
          <!DOCTYPE html>
          
          <head >
          
          <meta charset="UTF-8">
          <meta name="robots" content="noindex, nofollow"> 
          
          <link rel="stylesheet" href="stilmall.css" type="text/css" />
          
          <style type="text/css">
          </style>
          
          <title>utforska</title>
          
          </head>
          
          <body>
          <?php $_SESSION['sida'] = 'z-utforska.php';
          //$_SESSION['sida1'] = 'z-utforska.php';  
          ?> 
          
          <?php include ("menylista.php"); ?>
          
          <div id="storruta">
          <h1>Ladda upp en fil</h1>
          
          <form  method="post" action="z-ladda.php" enctype="multipart/form-data">
          <input type="file" id="file" name="file" onchange='submit()'>
          </form>
          
          </div>
          </body>
          </html>
          Tar hand om det som blev uppladdat:
          PHP Code:
          <?php session_start();?>
          <!DOCTYPE html>
          <html>
          <head >
          
          <meta charset="UTF-8">
          <meta name="robots" content="noindex, nofollow"> 
          
          <link rel="stylesheet" href="stilmall.css" type="text/css" />
          
          <style type="text/css">
          </style>
          
          <title>ladda</title>
          </head>
          
          <body>
          <?php $_SESSION['sida'] = 'z-ladda.php'; 
          ?>
          <?php include ("menylista.php"); ?>
          <?php $_SESSION['filen']=$_FILES["file"]["name"];?>
          <div id="storruta">
          
          <h1>Laddar upp vald fil</h1>
          
          <?php
          move_uploaded_file ($_FILES["file"]["tmp_name"], $_SESSION['mapp']."/" . $_FILES["file"]["name"]);
          ?>
          <?php 
          if ($_FILES["file"]["type"]=="image/pjpeg"){
          /*
          $bild= $_SESSION['mapp']."/".$_FILES["file"]["name"];
          list($width, $height) = getimagesize($bild);
          
          echo $width." ".$height; 
          echo "  ";
          echo $_FILES["file"]["type"];
          */
          $filnamn = $_SESSION['filnamn'];
          $file = fopen($filnamn, "r");
          $innehall = fread($file, filesize ($filnamn));
          fclose($file);
          
          $divdel="<div class=\"bild-v-260\">"; 
          $imgdel="<img src=\"".$_SESSION['mapp']."/".$_FILES["file"]["name"]."\""." alt=\"bild\"></div>";
          
          $nyinnehall = $divdel.$imgdel.$innehall;
          
          $file = fopen($filnamn, "w");
          fwrite($file, $nyinnehall);
          fclose($file);
          exit;
          }
          ?>
          
          <?php if ($_FILES["file"]["type"]=="application/pdf"):?>
          
          <p>
          Ange en text till länken<p>
          <div id="knapp">
          <form id="avbryt" name="avbryt" action="z-cancel.php">
          <input type="submit" name="submit" id="submit" value="Avbryt" />
          </form>
          </div> 
          
          <form method="post" action="z-lank.php">
          <fieldset>
          <input type="text" name="text" id="text" size="50"><p>
          <input type="submit" name="submit" id="submit" value="Skicka">
          </fieldset>
          </form> 
          
          <?php endif ?>
          
          </div>
          
          </body>
          </html>
          Hade börjat testa lite att manipulera bildstorleken (kod bortkommenterad) men det fungerar bara om jag lägger bilden på disk först (får inte tag på värden från tempfilen).

          I övrigt funkar det. Måste slutanvändaren manipulera bilderna själva för att jag överhuvudtaget ska kunna ladda upp dem, kan de ju lika gärna göra hela jobbet med lite hjälpinstruktioner själva? Bilder som jag har skalat ner som jag vill ha dem läggs ut snyggt o prydligt så jag är frestad att nöja mig med det om det inte finns något enkelt sätt att komma förbi det första hindret.
          Mvh

          Comment

          • @nders
            Moderator
            Marsvin
            • 2000-06-30
            • 26914

            #6
            [citat]men det fungerar bara om jag lägger bilden på disk först (får inte tag på värden från tempfilen).[/citat]Är det verkligen ett problem då? Om det inte går att manipulera tempfilen, spara filen till disk först och öppna den därifrån.

            mvh
            @aviddevguy

            Comment

            • kluringen
              Medlem
              • 2011-07-16
              • 201

              #7
              Originally posted by @nders
              [citat]men det fungerar bara om jag lägger bilden på disk först (får inte tag på värden från tempfilen).[/citat]Är det verkligen ett problem då? Om det inte går att manipulera tempfilen, spara filen till disk först och öppna den därifrån.

              mvh
              Det problemet är ju lätt att komma runt precis som du säger. Värre är att originalfilen inte laddas inte upp alls. Först efter att jag skalar ner bilden manuellt kan jag ladda den. Då känns det ju meningslöst att låta bli att skala ner den helt och hållet till presentabelt skick. Det ställer ju inte större krav på användaren att skala bilden till "färdig" storlek än att skala den till laddbart skick.
              Mvh

              Comment

              • @nders
                Moderator
                Marsvin
                • 2000-06-30
                • 26914

                #8
                Menar du att bilden är för tung (dvs för många bytes) för att du ska kunna spara den? Vilka tyngder pratar vi om?
                @aviddevguy

                Comment

                • kluringen
                  Medlem
                  • 2011-07-16
                  • 201

                  #9
                  3072 x 2304 px (alla)
                  2,3 upp till 3,8 Mb, vet inte varför det varierar, har använt samma kamera
                  Mvh

                  Comment

                  • @nders
                    Moderator
                    Marsvin
                    • 2000-06-30
                    • 26914

                    #10
                    Om det beror på att filerna är för stora kanske du kan ändra i php.ini om du har tillgång till det?

                    @aviddevguy

                    Comment

                    • kluringen
                      Medlem
                      • 2011-07-16
                      • 201

                      #11
                      PHP Code:
                      echo $_FILES["file"]["error"]; 
                      
                      ger returkod 1. Hur vet jag vad det betyder? Så att jag angriper rätt orsak?
                      Mvh

                      Comment

                      • walter groupius
                        Medlem
                        • 2004-07-30
                        • 230

                        #12
                        roliga filmer, boka hotell, konferens, bilder, Spa

                        Comment

                        • kluringen
                          Medlem
                          • 2011-07-16
                          • 201

                          #13
                          Tack walter groupius, och tack @nders. Nästa fråga: Måste jag ladda ner nåt för att få till php.ini filen? Blir jag tvungen att gräva i Apache konfigurationen också på min lokala server? Jag fick en länk av @nders, där finns en upload länk i texten. Får lite kalla fötter när jag inte vet vad som händer sen.
                          Mvh

                          Comment

                          • Pedda
                            Forumvärd
                            • 2000-06-28
                            • 4880

                            #14
                            Default inställningen för max uppladdningsstorlek är 2 Mb i php.ini
                            Har du sidan på ett vanligt webbhotell så har du nog inte så du kan ändra några inställningar i php.ini

                            Kolla vad du har för inställningar på servern med phpinfo()

                            /red
                            Använd ini_set() för att ändra upload_max_filesize i scriptet om du inte har tillgång till php.ini på servern.
                            Om jag var blygsam,skulle jag vara perfekt
                            ><((((º>

                            Comment

                            • drew
                              Medlem
                              • 2007-03-12
                              • 748

                              #15
                              Det ska räcka att ändra i php.ini om du har tillgång till den. /etc/php5/apache2/php.ini om du har en linux-server. Du ska inte behöva ladda ner något, utom att du kanske ska installera en texteditor. nano brukar finnas med.

                              Om du inte har tillgång till php.ini så är det inte säkert att ini_set() fungerar heller. Men värt ett försök.
                              http://tumba25.net

                              Comment

                              Working...