$maxHeight || $width > $maxWidth) { $srcX = 0; $srcY = 0; $srcWidth = $width; $srcHeight = $height; $dstWidth = $width; $dstHeight = $height; if (!$crop) // Resize { $ratio = NULL; if ($dstWidth > $maxWidth) { $ratio = $dstWidth / $maxWidth; $dstWidth = $maxWidth; $dstHeight = (int) ($dstHeight / $ratio); } if ($dstHeight > $maxHeight) { $ratio = $dstHeight / $maxHeight; $dstHeight = $maxHeight; $dstWidth = (int) ($dstWidth / $ratio); } } else // Cut & resize { if ($width > $maxWidth) $dstWidth = $maxWidth; if ($height > $maxWidth) $dstHeight = $maxHeight; if ($width <= $maxWidth) { if ($height > $srcHeight) $srcHeight = $maxHeight; } elseif ($height <= $maxHeight) { if ($width > $maxWidth) $srcWidth = $maxWidth; } else { $srcWidth = (int) ($maxWidth * ($height / $maxHeight)); $srcHeight = (int) ($maxHeight * ($width / $maxWidth)); if ($srcWidth <= $width) $srcHeight = $height; else $srcWidth = $width; } if ($width !== $srcWidth) $srcX = (int) (($width / 2) - ($srcWidth / 2)); if ($height !== $srcHeight) $srcY = (int) (($height / 2) - ($srcHeight / 2)); } $resizedImage = imagecreatetruecolor ($dstWidth, $dstHeight); imagealphablending ($resizedImage, FALSE); imagesavealpha ($resizedImage, TRUE); imagecopyresampled ($resizedImage, $image, 0, 0, $srcX, $srcY, $dstWidth, $dstHeight, $srcWidth, $srcHeight); $saved = imagepng ($resizedImage, $dstFile); imagedestroy ($resizedImage); } elseif (isset ($symbolicSrc)) { $saved = symlink ($symbolicSrc, $dstFile); } else { imagesavealpha ($image, TRUE); $saved = imagepng ($image, $dstFile); } if (!$saved) throw new UserException (sprintf (s('File save error: %s'), $dstFile)); } }