GVKun编程网logo

有没有一种方法可以用Java中的多个图像创建一个Gif图像?(java多张图片合成)

22

在本文中,您将会了解到关于有没有一种方法可以用Java中的多个图像创建一个Gif图像?的新资讯,同时我们还将为您解释java多张图片合成的相关在本文中,我们将带你探索有没有一种方法可以用Java中的多

在本文中,您将会了解到关于有没有一种方法可以用Java中的多个图像创建一个Gif图像?的新资讯,同时我们还将为您解释java多张图片合成的相关在本文中,我们将带你探索有没有一种方法可以用Java中的多个图像创建一个Gif图像?的奥秘,分析java多张图片合成的特点,并给出一些关于Java Stream:有没有一种方法可以一次迭代两个元素而不是一个?、javascript-有没有一种方法可以在jquery中使用图像地图坐标?、python:有没有一种方法可以对列表中的多个值的元组进行排序?、如何使用步幅从单个图像创建多个图像?的实用技巧。

本文目录一览:

有没有一种方法可以用Java中的多个图像创建一个Gif图像?(java多张图片合成)

有没有一种方法可以用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:有没有一种方法可以一次迭代两个元素而不是一个?

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 "";
});

但是我对它并不完全满意,主要有两个原因

  1. 我在“滥用” reduce功能。在Stream API中,每个函数都有其明确的定义明确的目的:max应该计算最大值,filter应该根据条件进行过滤,reduce应该产生递增的累加值,依此类推。
  2. 这样做会使我无法使用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中使用图像地图坐标?

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:有没有一种方法可以对列表中的多个值的元组进行排序?

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尺寸。

Original Image

输出:

Sample output

解决方法

正如您正确推测的那样,有一种方法可以在不复制原始数据的情况下查看原始数据的窗口。最简单的方法可能是使用相对较新的 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.moveaxistranspose:

np.moveaxis(window[80,70],-1)

window[80,70].transpose(1,2,0).shape

关于有没有一种方法可以用Java中的多个图像创建一个Gif图像?java多张图片合成的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Java Stream:有没有一种方法可以一次迭代两个元素而不是一个?、javascript-有没有一种方法可以在jquery中使用图像地图坐标?、python:有没有一种方法可以对列表中的多个值的元组进行排序?、如何使用步幅从单个图像创建多个图像?等相关知识的信息别忘了在本站进行查找喔。

本文标签: