如何在以下代码中停止调整大小和裁剪?

Posted

技术标签:

【中文标题】如何在以下代码中停止调整大小和裁剪?【英文标题】:How I can Stop Resizing and Cropping in following code? 【发布时间】:2014-12-22 05:54:01 【问题描述】:

这是我用来调整图像大小的代码,我想停止调整大小和裁剪...这是我用来调整图像大小的代码,我想停止调整大小和裁剪...这里是我用来调整图像大小的代码,我想停止调整大小和裁剪...这是我用来调整图像大小的代码,我想停止调整大小和裁剪...这是代码我正在调整我的图像大小,我想停止调整大小和裁剪...

   # ========================================================================#
   #
   #  Author:    Jarrod Oberto
   #  Version:   1.0
   #  Date:      17-Jan-10
   #  Purpose:   Resizes and saves image
   #  Requires : Requires php5, GD library.
   #  Usage Example:
   #                     include("classes/resize_class.php");
   #                     $resizeObj = new resize('images/cars/large/input.jpg');
   #                     $resizeObj -> resizeImage(150, 100, 0);
   #                     $resizeObj -> saveImage('images/cars/large/output.jpg', 100);
   #
   #
   # ========================================================================#


    Class resize
    
        // *** Class variables
        private $image;
        private $width;
        private $height;
        private $imageResized;

        function __construct($fileName)
        
            // *** Open up the file
            $this->image = $this->openImage($fileName);

            // *** Get width and height
            $this->width  = imagesx($this->image);
            $this->height = imagesy($this->image);
        

        ## --------------------------------------------------------

        private function openImage($file)
        
            // *** Get extension
            $extension = strtolower(strrchr($file, '.'));

            switch($extension)
            
                case '.jpg':
                case '.jpeg':
                    $img = @imagecreatefromjpeg($file);
                    break;
                case '.gif':
                    $img = @imagecreatefromgif($file);
                    break;
                case '.png':
                    $img = @imagecreatefrompng($file);
                    break;
                default:
                    $img = false;
                    break;
            
            return $img;
        

        ## --------------------------------------------------------

        public function resizeImage($newWidth, $newHeight, $option="auto")
        
            // *** Get optimal width and height - based on $option
            $optionArray = $this->getDimensions($newWidth, $newHeight, $option);

            $optimalWidth  = $optionArray['optimalWidth'];
            $optimalHeight = $optionArray['optimalHeight'];


            // *** Resample - create image canvas of x, y size
            $this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);
            imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, 
            $optimalHeight, $this->width, $this->height);


            // *** if option is 'crop', then crop too
            if ($option == 'crop') 
                $this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);
            
        

        ## --------------------------------------------------------

        private function getDimensions($newWidth, $newHeight, $option)
        

           switch ($option)
            
                case 'exact':
                    $optimalWidth = $newWidth;
                    $optimalHeight= $newHeight;
                    break;
                case 'portrait':
                    $optimalWidth = $this->getSizeByFixedHeight($newHeight);
                    $optimalHeight= $newHeight;
                    break;
                case 'landscape':
                    $optimalWidth = $newWidth;
                    $optimalHeight= $this->getSizeByFixedWidth($newWidth);
                    break;
                case 'auto':
                    $optionArray = $this->getSizeByAuto($newWidth, $newHeight);
                    $optimalWidth = $optionArray['optimalWidth'];
                    $optimalHeight = $optionArray['optimalHeight'];
                    break;
                case 'crop':
                    $optionArray = $this->getOptimalCrop($newWidth, $newHeight);
                    $optimalWidth = $optionArray['optimalWidth'];
                    $optimalHeight = $optionArray['optimalHeight'];
                    break;
            
            return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
        

        ## --------------------------------------------------------

        private function getSizeByFixedHeight($newHeight)
        
            $ratio = $this->width / $this->height;
            $newWidth = $newHeight * $ratio;
            return $newWidth;
        

        private function getSizeByFixedWidth($newWidth)
        
            $ratio = $this->height / $this->width;
            $newHeight = $newWidth * $ratio;
            return $newHeight;
        

        private function getSizeByAuto($newWidth, $newHeight)
        
            if ($this->height < $this->width)
            // *** Image to be resized is wider (landscape)
            
                $optimalWidth = $newWidth;
                $optimalHeight= $this->getSizeByFixedWidth($newWidth);
            
            elseif ($this->height > $this->width)
            // *** Image to be resized is taller (portrait)
            
                $optimalWidth = $this->getSizeByFixedHeight($newHeight);
                $optimalHeight= $newHeight;
            
            else
            // *** Image to be resizerd is a square
            
                if ($newHeight < $newWidth) 
                    $optimalWidth = $newWidth;
                    $optimalHeight= $this->getSizeByFixedWidth($newWidth);
                 else if ($newHeight > $newWidth) 
                    $optimalWidth = $this->getSizeByFixedHeight($newHeight);
                    $optimalHeight= $newHeight;
                 else 
                    // *** Sqaure being resized to a square
                    $optimalWidth = $newWidth;
                    $optimalHeight= $newHeight;
                
            

            return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
        

        ## --------------------------------------------------------

        private function getOptimalCrop($newWidth, $newHeight)
        

            $heightRatio = $this->height / $newHeight;
            $widthRatio  = $this->width /  $newWidth;

            if ($heightRatio < $widthRatio) 
                $optimalRatio = $heightRatio;
             else 
                $optimalRatio = $widthRatio;
            

            $optimalHeight = $this->height / $optimalRatio;
            $optimalWidth  = $this->width  / $optimalRatio;

            return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
        

        ## --------------------------------------------------------

        private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight)
        
            // *** Find center - this will be used for the crop
            $cropStartX = ( $optimalWidth / 2) - ( $newWidth /2 );
            $cropStartY = ( $optimalHeight/ 2) - ( $newHeight/2 );

            $crop = $this->imageResized;
            //imagedestroy($this->imageResized);

            // *** Now crop from center to exact requested size
            $this->imageResized = imagecreatetruecolor($newWidth , $newHeight);
            imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, 
            $newWidth, $newHeight , $newWidth, $newHeight);
        

        ## --------------------------------------------------------

        public function saveImage($savePath, $imageQuality="100")
        
            // *** Get extension
            $extension = strrchr($savePath, '.');
            $extension = strtolower($extension);

            switch($extension)
            
                case '.jpg':
                case '.jpeg':
                    if (imagetypes() & IMG_JPG) 
                        imagejpeg($this->imageResized, $savePath, $imageQuality);
                    
                    break;

                case '.gif':
                    if (imagetypes() & IMG_GIF) 
                        imagegif($this->imageResized, $savePath);
                    
                    break;

                case '.png':
                    // *** Scale quality from 0-100 to 0-9
                    $scaleQuality = round(($imageQuality/100) * 9);

                    // *** Invert quality setting as 0 is best, not 9
                    $invertScaleQuality = 9 - $scaleQuality;

                    if (imagetypes() & IMG_PNG) 
                         imagepng($this->imageResized, $savePath, $invertScaleQuality);
                    
                    break;

                // ... etc

                default:
                    // *** No extension - No save.
                    break;
            

            imagedestroy($this->imageResized);
        


        ## --------------------------------------------------------

    
 ?>

【问题讨论】:

不要...使用这个脚本?我的意思是..它完全只是为了调整大小和裁剪,如果你不想要其中任何一个..那么... 刘海靠墙... 但是当我尝试删除此代码时,我的整个网站都会出现错误并且没有图像显示.. 【参考方案1】:

尝试将图像高度和宽度设置为空

 private $height='';
 private $width='';

【讨论】:

【参考方案2】:

其实Resizing的主要原因就在这段代码中

// *** 包含类 include("resize-class.php");

// *** 1) 初始化/加载图像 $resizeObj = new resize('sample.jpg');

// *** 2) 调整图像大小(选项:精确、纵向、横向、自动、裁剪) $resizeObj -> resizeImage(150, 100, 'crop');

// *** 3) 保存图片 $resizeObj -> saveImage('sample-resized.gif', 100);

我将 150、100 的大小调整为我的实际大小并解决了问题......

【讨论】:

以上是关于如何在以下代码中停止调整大小和裁剪?的主要内容,如果未能解决你的问题,请参考以下文章

C# 裁剪和调整大图像大小

如何在 python TKinter 中使用 GStreamer 在视频播放器中调整大小和裁剪?

如何通过调整大小使用 Jcrop 裁剪大图像?

jQuery 调整大小(拖放)和裁剪

使用 Python - 如何在不超过原始图像大小的情况下调整裁剪图像的大小以满足纵横比

图像调整大小和裁剪