- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个脚本可以拍摄图像,并且在重新采样时将短尺寸(宽度或高度)居中放置在方形彩色背景上。这适用于具有较长 WIDTH 的图像,但由于某种原因,任何具有较长 HEIGHT 的图像结果是分离背景填充 - 左侧是正确的颜色,但右侧是默认黑色。如果我使用 x 轴偏移,背景填充只会向右延伸至图像位置。
计算值符合垂直图像的预期值,因此我无法弄清楚这里发生了什么。请注意,“imagecopy()”会产生完全相同的行为。
这是一个带有静态值的代码示例:
$thumb = imagecreatetruecolor(250, 250);
imagecopyresampled($thumb, $source, 77, 0, 0, 0, 250, 250, 400, 400);
$blue = imagecolorallocate($thumb, 0xDE, 0xE6, 0xF9);
imagefill($thumb, 0, 0, $blue);
使用旋转 90 度(400 x 155 像素)的相同图像,使其在水平方向上更长确实应用了完整的背景填充:
imagecopyresampled($thumb, $source, 0, 77, 0, 0, 250, 250, 400, 400);
对于垂直图像,我的坐标值 (77, 0) 将图像放置在 imagecreatetruecolor() Canvas 上,正好在我想要的位置居中,但更改任何其他 imagecopyresampled() 值拉伸(stretch)或挤压重采样图像或裁剪它.
我是否忽略了一些简单的事情?在此处查看屏幕截图: http://i.stack.imgur.com/5CxHU.jpg (垂直问题)和 http://i.stack.imgur.com/wvhzP.jpg (横向确定)
最佳答案
这个垂直问题一定与 PHP 的重采样/图像填充算法有关(?),但这里有一个解决方法,现在可以将我的所有垂直图像居中放置在我的方形 Canvas 中:
1) 您需要先填充图像占位符,以便通过使用 x 轴偏移量扩展缩略图高度(听起来很奇怪但它有效),背景填充将扩展到重新采样图像的右边缘...我们将稍后将其删除:
$thadj_height = $th_height + $th_x;
$thumb = imagecreatetruecolor($th_width, $thadj_height);
2) 像往常一样使用背景填充重新采样(请注意,填充是在重新采样语句之后应用的,这很奇怪,但只是那样工作)...请记住 $thumb 的高度比 $th_width、$th_height 将占据的高度高:
imagecopyresampled($thumb, $source, $th_x, $th_y, 0, 0, $th_width, $th_height, $src_width, $src_height);
imagefill($thumb, 0, 0, $bgcolor);
3) 暂时保存图像输出,以便接下来可以对其应用新功能 - 将质量设置为无损,因为我们将重复使用它:
imagejpeg($thumb, "resampled/output_temp.jpg", 100);
imagedestroy($thumb);
4) 检索临时文件并获取新维度(覆盖之前的变量):
$file = "resampled/output_temp.jpg";
$image = file_get_contents($file);
$source = imagecreatefromstring($image);
list($src_width, $src_height) = getimagesize($file);
5) 创建一个新的图像占位符,在我的例子中是正方形的:
$thumb = imagecreatetruecolor($th_width, $th_height);
6) 现在将临时填充的缩略图复制到方形占位符中,这将导致裁剪掉填充:
imagecopy($thumb, $source, 0, 0, 0, 0, $src_width, $src_height);
header('Content-Type: image/jpeg');
echo imagejpeg($thumb);
imagedestroy($thumb);
同样,这些都不是将我的水平图像居中放置在方形 Canvas 上所必需的,但这是一种解决方法,可以消除分割填充背景。
关于php - imagecopyresampled() 导致分离颜色背景 imagefill(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30333946/
我有一个脚本可以拍摄图像,并且在重新采样时将短尺寸(宽度或高度)居中放置在方形彩色背景上。这适用于具有较长 WIDTH 的图像,但由于某种原因,任何具有较长 HEIGHT 的图像结果是分离背景填充 -
我在 Server 2008 R2 机器上安装了 PowerShellPack,但无法使用 PSImageTools 模块。所有图像操作都会产生错误 New-Object : Cannot load
我重写了保存方法,如下所示,并使用 get_thumbnails 和 sorl 保存.. 但是收到错误'ImageFile'对象没有属性'_commissed' class HotelPhotos(m
下面的代码进行 AJAX 调用,将数据发送到尝试使用 imagefill() 的 PHP 页面。如果您查看控制台,您会发现帖子已发送且响应正确。 Firebug 显示图像也是正确的图像。我知道图像正在
我正在使用此代码从 WIA 获取扫描图像: const wiaFormatJPEG = '{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}'; wiaFormatP
我正在尝试从 StringIO(或 cStringIO,更具体地说)获取数据并将其转换为 django.core.files.images.ImageFile。 但它不起作用。无论如何,我的意思是它在
我正在开发具有使用 Yocto 项目构建的自定义分发版的 Intel Edison,我正在使用的确切 python 版本是 2.7.3,PIL 版本是 1.1.7。 在尝试通过将 LOAD_TRUNC
我创建了一个小型控制台应用程序来对 .tiff 图像文件执行 OCR,我使用 tess4j 完成了此操作。 public class JavaApplication10 { /** * @param
我尝试使用 Apache Commons Procrun 将 JAR 文件安装为 Windows 服务。该服务已安装,但执行它会出现以下错误: [2018-02-26 14:00:26] [info]
我正在尝试为需要 django.db.models.ImageField 的测试用例设置数据。我正在尝试使用来自 factory-boy 的 factory.django.ImageField,但出现
我是一名优秀的程序员,十分优秀!