- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
好吧,我以为我理解这个功能,但我对这个有一个完整的心理障碍。
我想从 800x536 的照片创建尺寸为 75x75 的裁剪缩略图。
imagecopyresampled 函数有 10 个可能的参数。我首先尝试了这个:
// Starting point of crop
$tlx = floor(($width / 2) - ($new_width / 2)); //finds halfway point of big image and subtracts half of thumb.
$tly = floor(($height / 2) - ($new_height / 2)); //gets centre of image to be cropped.
imagecopyresampled($tmp_img,$img,0,0,$tlx,$tly,$new_width,$new_height,$orig_width,$orig_height);
这会找到大图像中途标记的任一侧并将其裁剪掉。或者我想。但它实际上裁剪了一些图片并使右侧和底部保持黑色(大概来自之前的 imagecreatetruecolor。
所以我找到了一种方法来做我想做的事,但我希望你解释一下它是如何工作的。
我现在有:
//Create thumbnails.
$new_width = 75; //pixels.
$new_height = 75;
if($width > $height) $biggest_side = $width;
else $biggest_side = $height;
//The crop size will be half that of the largest side
$crop_percent = .5;
$crop_width = $biggest_side*$crop_percent;
$crop_height = $biggest_side*$crop_percent;
$c1 = array("x"=>($width-$crop_width)/2, "y"=>($height-$crop_height)/2);
//Create new image with new dimensions to hold thumb
$tmp_img = imagecreatetruecolor($new_width,$new_height);
//Copy and resample original image into new image.
imagecopyresampled($tmp_img,$img,0,0,$c1['x'],$c1['y'],$new_width,$new_height,$crop_width,$crop_height);
它做得很完美,缩小图像然后从中间裁剪掉,但我的数学不是很敏锐,而且我认为这肯定是我不完全理解 imagecopyresampled 函数。
谁能帮我解决一下?逐个参数。特别是最后两个。最初我输入了原始图像的宽度和高度,但这输入了 400 和 400(最长边的一半)。对不起的咆哮。希望我的头脑能尽快理解这一点:)
亚历克斯
最佳答案
它相当简单,已记录 here
参数:
1) $dst_image,一个有效的 GD 句柄,表示要复制到的图像
2) $src_image,一个有效的 GD 句柄,表示您要从中复制的图像
3) $dst_x - 要将重采样图像放入目标图像中的 X 偏移
4) $dst_y - Y 偏移量,同上
5) $src_x - 您要从中开始复制的源图像中的 X 偏移量
6) $src_y - Y 偏移量,同上
7) $dst_x - $dst_image 中新重采样图像的 X 宽度
8) $dst_y - Y 宽度,同上
9) $src_x - 要从 $src_image 中复制出来的区域的 X 宽度
10) $src_y - Y 宽度,同上
所以...
你有一个 800x536 的 $src_image 和一个 75x75 的 $dst_image
$width = 800 $new_width = 75
+-----------------------+ +----+
| | | |
| | | | $new_height = 75
| | $height = 536 +----+
| |
| |
+-----------------------+
听起来您想获取源图像的中间 block 并从中制作缩略图,对吗?这个中间 block 应该代表原始图像高度和宽度的一半,所以你想要:
$start_X = floor($width / 4); // 200
$width_Y = floor($height / 4); // 134
200 400 200
+-----------------------+
| | | | 134
|-----+----------+------|
| | This part| | 268
|-----+----------+------|
| | | | 134
+-----------------------+
$end_x = $start_X + (2 * $start_x) // 3 * $start_x = 600
$end_y = $start_Y + (2 * $start_y) // 3 * $start_y = 402
imagecopyresampled($src, $dst, 0, 0, $startX, $start_y, 75, 75, $end_x, $end_y);
a b c d e f g h
a,b - 开始将新图像粘贴到目标图像的左上角
c,d - 在 200,134 处开始从原始图像中吸取像素
e,f - 将调整后的图像设为 75x75(填满缩略图)
g,h - 停止复制原始图像中 600x402 处的像素
现在,假设您希望缩略图完全填满。如果您希望源图像按比例缩小(因此它具有与原始图像相同的高度/宽度比例,那么您必须进行一些数学运算来调整 a,b
和 e,f
参数。
关于php - PHP 中的 imagecopyresampled,有人可以解释一下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3604940/
我在使用 imagecopyresampled 时遇到了一些问题,主要是图像没有正确缩放,图像位置错误,边缘有黑色边框。 我设置了以下变量 $tW = $width; // Original
我有以下工作正常: 用户上传一张图片,然后使用 imagecopyresampled 和 imagejpeg 调整图片大小(保持比例),使其适合裁剪 DIV。 然后用户使用 JCrop 裁剪图像,然后
因此,我尝试使用 imagecopyresampled 来裁剪照片的一部分,这样我就不必担心我的用户上传到我的网站的照片比预期的要大。不幸的是,我还没有弄清楚为什么 imagecopyresample
我有一个调整大小的图像脚本,它采用 130x81 图像并将其添加到 130x130 图像,当 imagecopyresampled 函数运行时,它会在剩余的空间中添加黑色背景,即使基本图像是白色的。下
我想在另一个大图像上添加一个小图像作为不透明的水印。 我正在使用 imagecopyresampled 将图像放在另一个图像上。 但是,如何为水印图像提供不透明度。 请帮帮我。 我正在使用这个简单的示
我有一个 php 脚本,它可以保存原始图像,然后调整它的大小 - 一个缩略图和一个较大的图像供网络查看。这很好用,除了一些图像质量很差。它似乎是用一个非常低的颜色托盘保存的。您可以在 http://k
我试图在旋转图像(许多图像$im)后复制图像(到$img),但我得到了奇怪的行为。一旦我取消注释 //$img = 行,我只会在最终输出中获得旋转图像。我可以旋转内部 $im 并将其复制到最终图像 $
我正在创建一个需要使用 jQuery 缩放脚本的网站。问题是我需要管理员上传的原始文件的 4 倍大图像。我写的代码是: $allowedExts = array("jpeg", "jpg"); $ex
$image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); i
我有以下代码: $fullImg = $_POST['img']; $avatar_name = $log_username.md5(uniqid()).'_avatar.jpg'; $avatar_
imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x
我想使用 imagecreatetruecolor 裁剪图像,它总是裁剪它留下黑色空间,或者缩放太大。我希望图像恰好是 191px 宽和 90px 高,所以我还需要调整图像的大小以及裁剪,因为比例必须
我正在尝试从正常尺寸的图像创建 2 个裁剪缩略图(60x60 和 150x150)。除了裁剪之外,一切都很好,裁剪不起作用。该部分正在生成一个缩略图,右侧有一条黑线,如下所示: ...........
我有一个脚本可以拍摄图像,并且在重新采样时将短尺寸(宽度或高度)居中放置在方形彩色背景上。这适用于具有较长 WIDTH 的图像,但由于某种原因,任何具有较长 HEIGHT 的图像结果是分离背景填充 -
将图片上传到我的网站后,图片正在调整大小。我正在使用 imagecreatefromjpeg 和 imagecopyresampled 函数。我注意到颜色与原始图像中的颜色不同。 从这里你可以看出区别
好吧,我以为我理解这个功能,但我对这个有一个完整的心理障碍。 我想从 800x536 的照片创建尺寸为 75x75 的裁剪缩略图。 imagecopyresampled 函数有 10 个可能的参数。我
我正在我的网站上构建一个图片上传功能,让用户可以将任何尺寸的图片上传到网站。此图片会自动调整为缩略图大小。我浏览了一些代码,我看到一些代码使用 imagecopyresampled() 函数来调整大小
我需要一个脚本,它可以在提供的图像上制作圆角透明角。我找到了一个,除了一件事外效果很好:应用的角看起来不光滑。 imageantialias()自 PHP is running on Debian 后
我正在使用jquery file upload脚本并已成功将主图像上传到 Amazon S3。我现在正在尝试更换多个图像尺寸以上传到 S3 中的子文件夹或对象。 在 UploadHandler.php
这些似乎都在做同样的事情。各自的优点/缺点是什么。 imagecopyresized() 对比 imagecopyresampled() 对比 imagecopy()。 我正在调整用户提交的图像的大小
我是一名优秀的程序员,十分优秀!