gpt4 book ai didi

php - 如何调整图像大小保持约束php

转载 作者:可可西里 更新时间:2023-11-01 00:09:05 25 4
gpt4 key购买 nike

我制作了两个 GIF 来解释我正在尝试做的事情。灰色边框是我想要的尺寸 (700*525)。他们在这个问题的底部。

我希望所有大于给定宽度和高度的图像按比例缩小到边界(从中心开始),然后裁剪掉边缘。这是我整理的一些代码来尝试这样做:

if ($heightofimage => 700 && $widthofimage => 525){
if ($heightofimage > $widthofimage){

$widthofimage = 525;
$heightofimage = //scaled height.

//crop height to 700.

}

if ($heightofimage < $widthofimage){

$widthofimage = //scaled width.
$heightofimage = 700;

//crop width to 525.

}
}else{
echo "image too small";
}

这里有一些 GIF,直观地解释了我要实现的目标:

GIF 1:此处图像在x方向上的比例太大

enter image description here

GIF 2:此处图像在 y 方向上的比例太大

enter image description here


@timclutton 的图像质量比较

所以我在 PHP (click here to do your own test with the php) 中使用了你的方法然后将其与原始照片进行比较,您会发现有很大的不同!:

你的PHP方法:

enter image description here
(来源:tragicclothing.co.uk)

实际文件:

enter image description here
(来源:mujjo.com)


最佳答案

下面的代码应该做你想做的。我没有对它进行过广泛的测试,但它似乎适用于我制作的几张测试图像。脑海深处有一个微不足道的疑问,我的数学哪里出了问题,但已经晚了,我看不到任何明显的东西。

编辑:它已经足够烦人了,我再次检查并发现了错误,即裁剪不在图像中间。代码替换为工作版本。

简而言之:将此作为起点,而不是生产就绪代码!

<?php

// set image size constraints.
$target_w = 525;
$target_h = 700;

// get image.
$in = imagecreatefrompng('<path to your>.png');

// get image dimensions.
$w = imagesx($in);
$h = imagesy($in);

if ($w >= $target_w && $h >= $target_h) {
// get scales.
$x_scale = ($w / $target_w);
$y_scale = ($h / $target_h);

// create new image.
$out = imagecreatetruecolor($target_w, $target_h);

$new_w = $target_w;
$new_h = $target_h;
$src_x = 0;
$src_y = 0;

// compare scales to ensure we crop whichever is smaller: top/bottom or
// left/right.
if ($x_scale > $y_scale) {
$new_w = $w / $y_scale;

// see description of $src_y, below.
$src_x = (($new_w - $target_w) / 2) * $y_scale;
} else {
$new_h = $h / $x_scale;

// a bit tricky. crop is done by specifying coordinates to copy from in
// source image. so calculate how much to remove from new image and
// then scale that up to original. result is out by ~1px but good enough.
$src_y = (($new_h - $target_h) / 2) * $x_scale;
}

// given the right inputs, this takes care of crop and resize and gives
// back the new image. note that imagecopyresized() is possibly quicker, but
// imagecopyresampled() gives better quality.
imagecopyresampled($out, $in, 0, 0, $src_x, $src_y, $new_w, $new_h, $w, $h);

// output to browser.
header('Content-Type: image/png');
imagepng($out);
exit;

} else {
echo 'image too small';
}

?>

关于php - 如何调整图像大小保持约束php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com