Please upgrade here. These earlier versions are no longer being updated and have security issues.
HackerOne users: Testing against this community violates our program's Terms of Service and will result in your bounty being denied.

Can you set a max width / height for images uploaded with the editor

2»

Comments

  • noncenonce Necro-on Forensics
    edited March 2016

    another option you may want- which is quite easy.

    butonbar plugin with the imageupload plugin. you can scale the image with config statements.

    I think it has been reported as not compatible with the editor but you could give it a try or fix it, if it doesn't work in synch.

  • noncenonce Necro-on Forensics
    edited March 2016

    @SeanBallast

    another way you might want to test. any changes you make will be lost when you update vanilla.
    this would be the fastest way performance wise, instead of reprocessing with a plugin.

    in the editor plugin itself look for

    $filePathParsed = Gdn_UploadImage::saveImageAs($tmpFilePath, $absoluteFileDestination, '', '', array('SaveGif' => true));

    to

    $height = "800";
    $width = "600";

    $filePathParsed = Gdn_UploadImage::saveImageAs($tmpFilePath, $absoluteFileDestination, $height, $width, array('SaveGif' => true));

  • @vrijvlinder said:

    Will this shink all images by half if set at 50?

    You still don't understand the difference between weight in bytes and dimensions in height and width.

    This will make the images weigh less by reducing the resolution. Not the width or height. As I said before, an image can be small in width and height but weigh 10mb. It can also be huge and weigh only 900k max.

    The reason why you want to make the images weigh less is because you don't want to host heavy images ? or is it because they take too long to load and take up too much space? Or because they are so big they take up an entire page and you can't see the discussions ?

    Trust me Im a graphic designer, I know the difference between the dimensions of the image and storage size.

    What I basically want to do is implement this resizing script into vanilla

    https://github.com/Nimrod007/PHP_image_resize/blob/master/smart_resize_image.function.php

  • vrijvlindervrijvlinder Papillon-Sauvage MVP

    What I basically want to do is implement this resizing script into vanilla

    You can create a plugin using that code like the example bellow, put it in a php file and call it default.php or class.ImageResizeplugin.php and make a folder for the new plugin called ImageResize or whatever the name you want to use but they must all match.

    You will need to add a function somewhere in there I have not tested or tried this but it gives you an idea of how to make plugins to extend vanilla functionality.

    <?php if (!defined('APPLICATION')) exit();
    
    $PluginInfo['ImageResize'] = array(
       'Name' => 'ImageResize',
       'Description' => 'Resizes images for optimization',
       'Version' => '1.0',
        'License'=>"GNU GPL2",
       'Author' => "You"
    );
    
    
        class ImageResize_Plugin extends Gdn_Plugin {
    
    
       /* you would need a function similar to this bellow to tie it into the uploads for vanilla
      public function gdn_upload_saveAs_handler($sender) {  */
    
    /**
         * easy image resize function
         * @param  $file - file name to resize
         * @param  $string - The image data, as a string
         * @param  $width - new image width
         * @param  $height - new image height
         * @param  $proportional - keep image proportional, default is no
         * @param  $output - name of the new file (include path if needed)
         * @param  $delete_original - if true the original image will be deleted
         * @param  $use_linux_commands - if set to true will use "rm" to delete the image, if false will use PHP unlink
         * @param  $quality - enter 1-100 (100 is best quality) default is 100
         * @return boolean|resource
         */
     function smart_resize_image($file,
                                      $string             = null,
                                      $width              = 0, 
                                      $height             = 0, 
                                      $proportional       = false, 
                                      $output             = 'file', 
                                      $delete_original    = true, 
                                      $use_linux_commands = false,
                                      $quality = 100
                 ) {
    
            if ( $height <= 0 && $width <= 0 ) return false;
            if ( $file === null && $string === null ) return false;
            # Setting defaults and meta
            $info                         = $file !== null ? getimagesize($file) : getimagesizefromstring($string);
            $image                        = '';
            $final_width                  = 0;
            $final_height                 = 0;
            list($width_old, $height_old) = $info;
            $cropHeight = $cropWidth = 0;
            # Calculating proportionality
            if ($proportional) {
              if      ($width  == 0)  $factor = $height/$height_old;
              elseif  ($height == 0)  $factor = $width/$width_old;
              else                    $factor = min( $width / $width_old, $height / $height_old );
              $final_width  = round( $width_old * $factor );
              $final_height = round( $height_old * $factor );
            }
            else {
              $final_width = ( $width <= 0 ) ? $width_old : $width;
              $final_height = ( $height <= 0 ) ? $height_old : $height;
              $widthX = $width_old / $width;
              $heightX = $height_old / $height;
    
              $x = min($widthX, $heightX);
              $cropWidth = ($width_old - $width * $x) / 2;
              $cropHeight = ($height_old - $height * $x) / 2;
            }
            # Loading image to memory according to type
            switch ( $info[2] ) {
              case IMAGETYPE_JPEG:  $file !== null ? $image = imagecreatefromjpeg($file) : $image = imagecreatefromstring($string);  break;
              case IMAGETYPE_GIF:   $file !== null ? $image = imagecreatefromgif($file)  : $image = imagecreatefromstring($string);  break;
              case IMAGETYPE_PNG:   $file !== null ? $image = imagecreatefrompng($file)  : $image = imagecreatefromstring($string);  break;
              default: return false;
            }
    
    
            # This is the resizing/resampling/transparency-preserving magic
            $image_resized = imagecreatetruecolor( $final_width, $final_height );
            if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
              $transparency = imagecolortransparent($image);
              $palletsize = imagecolorstotal($image);
              if ($transparency >= 0 && $transparency < $palletsize) {
                $transparent_color  = imagecolorsforindex($image, $transparency);
                $transparency       = imagecolorallocate($image_resized, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']);
                imagefill($image_resized, 0, 0, $transparency);
                imagecolortransparent($image_resized, $transparency);
              }
              elseif ($info[2] == IMAGETYPE_PNG) {
                imagealphablending($image_resized, false);
                $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);
                imagefill($image_resized, 0, 0, $color);
                imagesavealpha($image_resized, true);
              }
            }
            imagecopyresampled($image_resized, $image, 0, 0, $cropWidth, $cropHeight, $final_width, $final_height, $width_old - 2 * $cropWidth, $height_old - 2 * $cropHeight);
    
    
            # Taking care of original, if needed
            if ( $delete_original ) {
              if ( $use_linux_commands ) exec('rm '.$file);
              else @unlink($file);
            }
            # Preparing a method of providing result
            switch ( strtolower($output) ) {
              case 'browser':
                $mime = image_type_to_mime_type($info[2]);
                header("Content-type: $mime");
                $output = NULL;
              break;
              case 'file':
                $output = $file;
              break;
              case 'return':
                return $image_resized;
              break;
              default:
              break;
            }
    
            # Writing image according to type to the output destination and image quality
            switch ( $info[2] ) {
              case IMAGETYPE_GIF:   imagegif($image_resized, $output);    break;
              case IMAGETYPE_JPEG:  imagejpeg($image_resized, $output, $quality);   break;
              case IMAGETYPE_PNG:
                $quality = 9 - (int)((0.9*$quality)/10.0);
                imagepng($image_resized, $output, $quality);
                break;
              default: return false;
            }
            return true;
          }
    
          public function Setup() {
    
            }
    
          }
    
Sign In or Register to comment.