- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
编辑
感谢您的所有回答,特别是 @Mailerdaimon,他注意到我没有在 imagecopyresampled
函数中使用计算值。
我不再得到黑色图像,但我仍然得到一些黑色部分,所以我认为我的比率公式应该更新:如果我上传横向图像,新图像的高度小于 170 像素,然后有一些黑色的表现。
我怎样才能确保图像的高度一直保持不变?
下面是一个允许用户上传图片的简单脚本。上传完成后,图片将显示为 170 像素(高)x 150 像素(宽)的缩略图。
调整大小部分确实有效,因为输出图像是 170x150px 但我仍然会得到一些黑色区域,如果
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$maxWidth = 150;
$maxHeight = 170;
$name = $_FILES ['image'] ['name'];
$type = $_FILES ["image"] ["type"];
$size = $_FILES ["image"] ["size"];
$tmp_name = $_FILES ['image'] ['tmp_name'];
list($originalWidth, $originalHeight) = getimagesize($tmp_name);
if ($originalWidth > $originalHeight)
{
$thumbnail_height = floor(($originalHeight/$originalWidth)*$maxWidth);
$thumbnail_width = $maxWidth;
} else {
$thumbnail_width = floor(($originalWidth/$originalHeight)*$maxHeight);
$thumbnail_height = $maxHeight;
}
// Resample
$image_p = imagecreatetruecolor($maxWidth, $maxHeight);
imagecreatefrompng($tmp_name);
imagecopyresampled($image_p, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height,
$originalWidth, $originalHeight);
//start upload process
$RandomNumber = uniqid();
$location = "uploads/$RandomNumber";
imagejpeg($image_p, $location, 100);
$sql=query("UPDATE users SET image = '".$location."' WHERE id = '$id'");
}
}
知道我做错了什么吗?
最佳答案
我从未使用过 php,所以这可能不正确,但我看不到您在哪里使用计算出的宽度和高度值!
if ($originalWidth > $maxWidth || $originalHeight > $maxHeight)
{
if ($originalWidth / $maxWidth > $originalHeight / $maxHeight)
{
// width is the limiting factor
$width = $maxWidth;
$height = floor($width * $originalHeight / $originalWidth);
} else {
// height is the limiting factor
$height = $maxHeight;
$width = floor($height * $originalWidth / $originalHeight);
}
在这里你计算高度和宽度,然后它们就不会出现在你的代码中的任何地方......
编辑:您使用:
$image_p = imagecreatetruecolor($maxWidth, $maxHeight);
imagecreatefrompng($tmp_name);
imagecopyresampled($image_p, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height,$originalWidth, $originalHeight);
但是Documentation imagecopyresmapled
声明该函数遵循以下内容
imagecopyresampled ($dst_image ,$src_image ,$dst_x ,$dst_y ,$src_x ,$src_y ,$dst_w , $dst_h ,$src_w ,$src_h )
虽然我认为你的代码应该是
imagecopyresampled($image_p,$tmp_name, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height,$originalWidth, $originalHeight);
正如@Manolo Salsas(和其他几个人)已经提到的
编辑 2:另一个问题在于如何计算高度和宽度值。如果 $height
像这样计算
$height = floor($width * $originalHeight / $originalWidth);
它可以小于 $maxHeight
,但会在结果图像中创建一个黑色(未填充)区域,因为您使用最大值创建了此图像
$image_p = imagecreatetruecolor($maxWidth, $maxHeight);
要解决此问题,请使用您计算的 $thumbnail_height 和 $thumbnail_width 值来创建图像
$image_p = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
或者始终将图像调整为最大值
imagecopyresampled($image_p,$tmp_name, 0, 0, 0, 0, $maxWidth, $maxHeight,$originalWidth, $originalHeight);
这可能会扭曲图像。如果您不想扭曲图像,请考虑先调整大小,使尺寸适合缩略图,然后裁剪较长的一侧。
关于php - 为什么这个基本的 imagejpeg() 缩放器返回黑色图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19551747/
我在我的根文件夹中安装了 wordpress, 直到昨天它工作正常,但今天它给出了以下错误,因为我猜想生成缩略图, Warning: imagejpeg() [function:imagejpeg]:
问题: 我找到了这个解释如何使用 imagejpeg() 的简单脚本: 当我将它复制/粘贴到一个空的 php 文件中时,它工作正常。我显示图像。 现在,当我将这段代码插入到我现有的 php 文件中时
我使用函数 resizeImage() 来调整图像大小,但 偶尔 失败。大多数时候它都在工作,但有时我会收到无法找到文件的警告。应该是什么问题?如何解决这个问题? 想法: 文件权限 图片路径错误 se
我在网站上上传图片并将图片更改为适合 100 x 100 白色方 block 的缩略图。问题是图像看起来没有正确消除锯齿。在 photoshop 中缩小尺寸的图像看起来很平滑,但这些看起来松脆,就像
我有 php 代码来修剪白色外边框和调整大小。当我使用 imagejpeg($newImage) 将它输出到浏览器时它工作正常但是当我尝试使用 imagejpeg($newImage, 'test.j
我设法在浏览器上显示图像,但我无法使用 imagejpeg 保存它(我没有看到任何图像保存在服务器中)。我已经尝试了几个小时,并且还使用 is_writable 测试了该文件夹,正如其他人在这篇帖子中
尝试保存用 GD 制作的缩略图时 imagejpeg($tnImage, "../../img/thumbs/".$maxWidth."x".$maxHeight."_".$filename); 我收
我正在尝试将图片上传到两个不同的目录中,我想使用imagejpeg()函数将图片放入其中一个目录中。这两个目录称为 uploads 和 resized。 这是我完成此操作的代码: $tmp_name
将缩略图图像写入以下目录时出现以下错误 Warning: imagejpeg() [function.imagejpeg]: Unable to open 'D:\imagesdb\images\62
我正在尝试将图片上传到两个不同的目录中,我想使用imagejpeg()函数将图片放入其中一个目录中。这两个目录称为 uploads 和 resized。 这是我完成此操作的代码: $tmp_name
我有一个 php 文件,它使用上传的图像创建缩略图。如果我使用 imagejpeg( $tmp_img, $_FILES["file"]["name"] ); 它将图片毫无问题地保存到 upload.
我面临以下错误: 警告:imagejpeg() [function.imagejpeg]:无法打开“/home/user1/public_html/userpics/00005/small/5120.
我正在用 PHP + 图像处理做一些实验。我正在尝试将一些图像转换成黑白版本。我基本上已经弄明白了,但有一个小问题。 为了减少服务器的压力,我想保存黑白版本,只对以前没有通过脚本运行的图像运行图像过滤
我正在做一个项目,我使用 GD 库在 PHP 中编辑 jpg 的像素。PHP 的输出保留我设置的像素值,这对我的项目非常重要和关键(咳嗽-隐写术-咳嗽)。 这是我第一次尝试在 PHP 中进行图像处理。
编辑 感谢您的所有回答,特别是 @Mailerdaimon,他注意到我没有在 imagecopyresampled 函数中使用计算值。 我不再得到黑色图像,但我仍然得到一些黑色部分,所以我认为我的比率
我对 imagejpeg() 有疑问。我知道如何将图像保存/上传到 s3。我现在的问题。使用 imagejpeg 调整图像大小,但这仅保存到本地目录。我想将它保存到 s3。我正在使用拉拉维尔。这是我的
我想从磁盘上传图像,调整其大小,然后将其上传到 Amazon S3。 但是,我无法从 imagejpeg() 获得正确的图像输出。 继承人我的代码: $sourceUrl = $_FILES['pat
我在此网站上发现了一些代码,可帮助解决 iOS 照片重新分级时的方向问题。 这是 PhP 此代码似乎有效,但我没有看到输出的图像,因为我无法将更改后的图像移动到服务器。我需要做的是将图像移动到服务器
我收到此错误/警告: Warning: imagejpeg(): Unable to open '/var/www/my_web/data/my_web/www/users/avatars/user1
我尝试通过以下代码将图像资源保存为图像: imagejpeg ($destination_res, $destination, 100); 该脚本还包含一个有效的文件上传(文件始终存在于目标文件夹中)
我是一名优秀的程序员,十分优秀!