/** * Resize the image file into the given width and height * @param string|array $dimensions The dimension or array of dimensions, * e.g., '400x250' or array('400x250', '200x150') * @param string $file The source file * @param string $newFileName The new file name to be created * @param string $extension The file extension * @return string The new file name or null if any error occurs */ protected function resizeImageByDimension($dimensions, $file, $newFileName, $extension = null) { $dimensions = is_string($dimensions) ? array($dimensions) : $dimensions; $extension = $extension ? $extension : strtolower(pathinfo($file, PATHINFO_EXTENSION)); if ($extension == "jpg" || $extension == "jpeg") { $img = imagecreatefromjpeg($file); } elseif ($extension == "png") { $img = imagecreatefrompng($file); } elseif ($extension == "gif") { $img = imagecreatefromgif($file); } if (isset($img) && $img) { if (isset($this->imageFilterSet['jpgQuality']) && is_numeric($this->imageFilterSet['jpgQuality'])) { $jpgQuality = $this->imageFilterSet['jpgQuality']; } else { $jpgQuality = 75; } foreach ($dimensions as $dimension) { $resize = explode('x', $dimension); $resizeWidth = $resize[0]; $resizeHeight = $resize[1]; if ($this->imageFilterSet['resizeMode'] == FILE_RESIZE_WIDTH) { $tmp = File::resizeImageWidth($img, $file, $resizeWidth); } elseif ($this->imageFilterSet['resizeMode'] == FILE_RESIZE_HEIGHT) { $tmp = File::resizeImageHeight($img, $file, $resizeHeight); } else { $tmp = File::resizeImageBoth($img, $file, $resizeWidth, $resizeHeight); } $targetDir = is_string(func_get_arg(0)) ? $this->uploadPath : $this->uploadPath . $dimension . _DS_; if (!is_dir($targetDir)) { @mkdir($targetDir, 0777, true); } $targetFileName = $targetDir . $newFileName; if ($extension == "gif") { imagegif($tmp, $targetFileName); } elseif ($extension == "png") { imagesavealpha($tmp, true); imagepng($tmp, $targetFileName); } else { imagejpeg($tmp, $targetFileName, $jpgQuality); } imagedestroy($tmp); } if ($img) { imagedestroy($img); return $newFileName; } } else { $this->error = array('code' => FILE_UPLOAD_ERR_IMAGE_CREATE, 'message' => $this->getErrorMessage(FILE_UPLOAD_ERR_IMAGE_CREATE)); } return null; }