• <i id='1Xs3Q'><tr id='1Xs3Q'><dt id='1Xs3Q'><q id='1Xs3Q'><span id='1Xs3Q'><b id='1Xs3Q'><form id='1Xs3Q'><ins id='1Xs3Q'></ins><ul id='1Xs3Q'></ul><sub id='1Xs3Q'></sub></form><legend id='1Xs3Q'></legend><bdo id='1Xs3Q'><pre id='1Xs3Q'><center id='1Xs3Q'></center></pre></bdo></b><th id='1Xs3Q'></th></span></q></dt></tr></i><div id='1Xs3Q'><tfoot id='1Xs3Q'></tfoot><dl id='1Xs3Q'><fieldset id='1Xs3Q'></fieldset></dl></div>

        <small id='1Xs3Q'></small><noframes id='1Xs3Q'>

      1. <tfoot id='1Xs3Q'></tfoot>

        <legend id='1Xs3Q'><style id='1Xs3Q'><dir id='1Xs3Q'><q id='1Xs3Q'></q></dir></style></legend>
        • <bdo id='1Xs3Q'></bdo><ul id='1Xs3Q'></ul>

        php在上传时调整图像大小会在我不想要它时旋转图像

        时间:2023-12-02

              <bdo id='t8An6'></bdo><ul id='t8An6'></ul>

              <legend id='t8An6'><style id='t8An6'><dir id='t8An6'><q id='t8An6'></q></dir></style></legend>
            • <tfoot id='t8An6'></tfoot>

                <small id='t8An6'></small><noframes id='t8An6'>

                  <tbody id='t8An6'></tbody>

                <i id='t8An6'><tr id='t8An6'><dt id='t8An6'><q id='t8An6'><span id='t8An6'><b id='t8An6'><form id='t8An6'><ins id='t8An6'></ins><ul id='t8An6'></ul><sub id='t8An6'></sub></form><legend id='t8An6'></legend><bdo id='t8An6'><pre id='t8An6'><center id='t8An6'></center></pre></bdo></b><th id='t8An6'></th></span></q></dt></tr></i><div id='t8An6'><tfoot id='t8An6'></tfoot><dl id='t8An6'><fieldset id='t8An6'></fieldset></dl></div>
                • 本文介绍了php在上传时调整图像大小会在我不想要它时旋转图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个上传脚本可以调整上传的图像大小,但是,当我不希望某些图像被保存为旋转图像时,有什么方法可以保留原始图像方向?

                  I Have an upload script that resizes the images uploaded, however, some images are being saved as a rotated image when i dont want them to, any way to preserve the original image direction?

                   if (($resizeObj->width > 400) || ($resizeObj->height > 600)){
                  
                      // *** 2) Resize image (options: exact, portrait, landscape, auto, crop)
                      $resizeObj -> resizeImage(400, 400, 'crop');
                  
                      // *** 3) Save image
                      $resizeObj -> saveImage($path, 95);
                  
                      }
                  

                  这是我的类文件:

                   <?php
                  
                     # ========================================================================#
                     #
                     #  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;
                              public $width;
                              public $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);
                              }
                  
                  
                              ## --------------------------------------------------------
                  
                          }
                  ?>
                  

                  推荐答案

                  EXIF data 可能被这个基本脚本忽略了.

                  The EXIF data is probably being ignored by this basic script.

                  使用 调查您的图片是否嵌入了旋转信息exif_read_data,然后使用 这样的功能.

                  在你的情况下,

                  1. 获取我刚刚链接的脚本,
                  2. 将其粘贴到代码的第一行上方,
                  3. 将所有 $image-> 位更改为 $resizeObj->
                    (vim 风格的 grep: %s/image->/resizeObj->/g)
                  1. take the script I just linked,
                  2. paste it above the first line of your code,
                  3. change all the $image-> bits to $resizeObj->
                    (vim-style grep: %s/image->/resizeObj->/g)

                  这篇关于php在上传时调整图像大小会在我不想要它时旋转图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:如何使用 PLupload 发送附加数据? 下一篇:如何在 PHP 中编写文件上传测试?

                  相关文章

                • <small id='E86fY'></small><noframes id='E86fY'>

                    <tfoot id='E86fY'></tfoot>

                  1. <i id='E86fY'><tr id='E86fY'><dt id='E86fY'><q id='E86fY'><span id='E86fY'><b id='E86fY'><form id='E86fY'><ins id='E86fY'></ins><ul id='E86fY'></ul><sub id='E86fY'></sub></form><legend id='E86fY'></legend><bdo id='E86fY'><pre id='E86fY'><center id='E86fY'></center></pre></bdo></b><th id='E86fY'></th></span></q></dt></tr></i><div id='E86fY'><tfoot id='E86fY'></tfoot><dl id='E86fY'><fieldset id='E86fY'></fieldset></dl></div>

                        <bdo id='E86fY'></bdo><ul id='E86fY'></ul>
                      <legend id='E86fY'><style id='E86fY'><dir id='E86fY'><q id='E86fY'></q></dir></style></legend>