在本文中,您将会了解到关于有没有一种方法可以用Java中的多个图像创建一个Gif图像?的新资讯,同时我们还将为您解释java多张图片合成的相关在本文中,我们将带你探索有没有一种方法可以用Java中的多
在本文中,您将会了解到关于有没有一种方法可以用Java中的多个图像创建一个Gif图像?的新资讯,同时我们还将为您解释java多张图片合成的相关在本文中,我们将带你探索有没有一种方法可以用Java中的多个图像创建一个Gif图像?的奥秘,分析java多张图片合成的特点,并给出一些关于Java Stream:有没有一种方法可以一次迭代两个元素而不是一个?、javascript-有没有一种方法可以在jquery中使用图像地图坐标?、python:有没有一种方法可以对列表中的多个值的元组进行排序?、如何使用步幅从单个图像创建多个图像?的实用技巧。
本文目录一览:- 有没有一种方法可以用Java中的多个图像创建一个Gif图像?(java多张图片合成)
- Java Stream:有没有一种方法可以一次迭代两个元素而不是一个?
- javascript-有没有一种方法可以在jquery中使用图像地图坐标?
- python:有没有一种方法可以对列表中的多个值的元组进行排序?
- 如何使用步幅从单个图像创建多个图像?
有没有一种方法可以用Java中的多个图像创建一个Gif图像?(java多张图片合成)
我正在尝试建立一个简单的Java程序,该程序可以从其他多个图像(jpg)创建一个动画gif。谁能给我一个有关如何在Java中实现此目标的信息?我已经搜索过Google,但找不到任何真正有用的信息。
感谢你们!
答案1
小编典典这里有一个类的示例,该类从不同的图像创建动画的gif:
链接
编辑:链接似乎已死。 无论如何,为了清楚起见,这段代码是由Elliot Kroo完成的。
编辑2:感谢您@Marco13
找到WayBackMachine链接。更新了参考!
该类提供以下方法:
class GifSequenceWriter { public GifSequenceWriter( ImageOutputStream outputStream, int imageType, int timeBetweenFramesMS, boolean loopContinuously); public void writeToSequence(RenderedImage img); public void close();}
还有一个小例子:
public static void main(String[] args) throws Exception { if (args.length > 1) { // grab the output image type from the first image in the sequence BufferedImage firstImage = ImageIO.read(new File(args[0])); // create a new BufferedOutputStream with the last argument ImageOutputStream output = new FileImageOutputStream(new File(args[args.length - 1])); // create a gif sequence with the type of the first image, 1 second // between frames, which loops continuously GifSequenceWriter writer = new GifSequenceWriter(output, firstImage.getType(), 1, false); // write out the first image to our sequence... writer.writeToSequence(firstImage); for(int i=1; i<args.length-1; i++) { BufferedImage nextImage = ImageIO.read(new File(args[i])); writer.writeToSequence(nextImage); } writer.close(); output.close(); } else { System.out.println( "Usage: java GifSequenceWriter [list of gif files] [output file]"); }}
向Elliot Kroo推荐此代码。
Java Stream:有没有一种方法可以一次迭代两个元素而不是一个?
假设我们有这个流
Stream.of("a","b","err1","c","d","err2","e","f","g","h","err3","i","j");
我想在地图中保存几对相邻的字符串,其中第一个以“ err”开头。
我想到的就是这样
Map<String,String> map = new HashMap<>();
Stream.of("a","j")
.reduce((acc,next) -> {
if (acc.startsWith("err"))
map.put(acc,next);
if (next.startsWith("err"))
return next;
else
return "";
});
但是我对它并不完全满意,主要有两个原因
- 我在“滥用”
reduce
功能。在Stream API中,每个函数都有其明确的定义明确的目的:max
应该计算最大值,filter
应该根据条件进行过滤,reduce
应该产生递增的累加值,依此类推。 - 这样做会使我无法使用Streams强大的机制:如果我想将搜索范围限制在前两个结果中,该怎么办?
在这里,我reduce
之所以使用它,是因为(据我所知),它是唯一使您可以比较几个值的函数,以某种方式,它们可以返回类似于“当前值”和“下一个值”的概念。
有没有更直接的方法?是什么让您可以在每次迭代中考虑多个值来迭代流?
编辑
我正在考虑的是某种机制,在给定当前元素的情况下,您可以为每次迭代定义要考虑的“元素窗口”。
就像是
<R> Stream<R> mapMoreThanOne(
int elementsBeforeCurrent,int elementsAfterCurrent,Function<List<? super T>,? extends R> mapper);
代替
<R> Stream<R> map(Function<? super T,? extends R> mapper);
那将是对当前API的强大“升级”。
编辑2
我感谢人们提出他们的解决方案所付出的努力,但问题本身不是算法。通过将流,索引,临时变量放在一起以存储先前的值来实现我的目标,有多种方法…但是我想知道Stream
API中是否有某种方法专门用于处理当前元素以外的任务而不破坏“流范式”。像这样
List<String> list =
Stream.of("a","j")
.filterFunctionImWonderingIfExist(/*filters couples of elements*/)
.limit(2)
.collect(Collectors.toList());
有了答案,我认为除非使用StreamEx库,否则没有“清晰快捷”的解决方案
javascript-有没有一种方法可以在jquery中使用图像地图坐标?
我想使用图像地图的坐标,而不是地图本身.所以我的问题是我可以使用图像地图的坐标并检测用户是否使用jquery滚动了这些坐标吗?
编辑:
我的目标是这样的:(实际上并没有使用图像映射,只是坐标).
图像图中的坐标:186,106,199,86,220,86,241,94,245,109
$("img#test").hover(function(e) {
if (e.pageX >= 186 && e.pageY >= 106 &&
e.pageX >= 199 && e.pageY >= 86 &&
e.pageX >= 220 && e.pageY >= 86 &&
e.pageX >= 241 && e.pageY >= 94 &&
e.pageX >= 245 && e.pageY >= 109)
alert("wewt");
});
解决方法:
您可以直接或使用jQuery将事件侦听器添加到标签中.例如:
<map name="testmap" id="testmap">
<area shape="rect" coords="10,9,58,27" href="#" title="" alt="You are on a rectangle!">
<area shape="circle" coords="104,18,14" href="#" title="" alt="You are on a circle!">
</map>
<img src="/img/image.png"usemap="#testmap" />
<script type="text/javascript">
$('#testmap area').mouSEOver(function()
{
alert($(this).attr("alt"));
});
</script>
python:有没有一种方法可以对列表中的多个值的元组进行排序?
lst = [(('milk',),5),(('milk','eggs'),3),(('yogurt','milk'),(('eggs','eggs','yogurt'),2),'bread'),'cheese'),(('bread',(('cheese',2)]
from pprint import pprint
pprint(sorted(((tuple(sorted(a)),b) for a,b in lst),key=lambda k: (-k[1],-len(k[0]),k[0])))
打印:
[(('milk','milk',2)]
注意:我认为您的初始列表未排序。
,组是不可变的,因此您需要创建新组:
lst = [(('milk',2)]
out = [(tuple(sorted(items)),number) for items,number in lst]
print(out)
给予:
[(('milk',2)]
这是您已经做完所有事情以获得问题中显示的排序列表之后的内容(第一和第二要求)。
如何使用步幅从单个图像创建多个图像?
如何解决如何使用步幅从单个图像创建多个图像??
我有一个图像,我想使用垂直和水平步幅(如滑动窗口)将其拆分为多个图像,并且生成的图像都具有相同的分辨率。我怎样才能在 Python 中有效地做到这一点?我做了这么多:
from PIL import Image
def sliding_window(image,stride,imgSize):
width,height = image.size
img = []
for y in range(0,height-imgSize,stride):
for x in range(0,width-imgSize,stride):
# Setting the points for cropped image
left = x
top = y
right = x + imgSize
bottom = y + imgSize
im1 = image.crop((left,top,right,bottom))
img.append(im1)
return img
file = "/home/xxxxxx/yyyyyy.png"
im = Image.open(file)
img = sliding_window(im,1,838) # Strides of 1 takes too much time
但是这段代码需要太多的内存并且太耗时。请帮忙。
示例:
示例代码:img = sliding_window(im,200,300)
下图为800*800尺寸。
输出:
解决方法
正如您正确推测的那样,有一种方法可以在不复制原始数据的情况下查看原始数据的窗口。最简单的方法可能是使用相对较新的 sliding_window_view
函数:
from numpy.lib.stride_tricks import sliding_window_view
window = sliding_window_view(image,(838,838),axis=(0,1))
对于 2D 图像,您不需要显式 axis
,但它不会受到伤害,并且在 3D 情况下为您节省了一些麻烦。如果你想调整步幅,你可以只对结果进行子集化。例如,对于 (3,4)
的步幅:
window = window[::3,::4]
由于窗口轴必须(应该)以 C 顺序排在最后,因此 3D 图像会将通道移动到中间轴。要访问正确的形状,您可以使用类似 np.moveaxis
或 transpose
:
np.moveaxis(window[80,70],-1)
或
window[80,70].transpose(1,2,0).shape
关于有没有一种方法可以用Java中的多个图像创建一个Gif图像?和java多张图片合成的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Java Stream:有没有一种方法可以一次迭代两个元素而不是一个?、javascript-有没有一种方法可以在jquery中使用图像地图坐标?、python:有没有一种方法可以对列表中的多个值的元组进行排序?、如何使用步幅从单个图像创建多个图像?等相关知识的信息别忘了在本站进行查找喔。
本文标签: