我正在尝试使用node.js上的graphicsmagick将gif转换为png.在他们的文档中,他们有以下代码:
// pull out the first frame of an animated gif and save as png
gm('/path/to/animated.gif[0]')
.write('/path/to/firstframe.png', function(err){
if (err) print('aaw, shucks')
})
Run Code Online (Sandbox Code Playgroud)
但是,如果我不是从文件中读取数据,而是从流或缓冲区读取数据呢?在那里我没有给出路径因此不能追加[0].
我需要的是这样的:
gm(streamOrBuffer).extractFrame(0)
.write('/path/to/firstframe.png', function(err){
if (err) print('aaw, shucks')
})
Run Code Online (Sandbox Code Playgroud)
有一个类似的问题在这里,但海报最终绘制画布上的GIF提取客户端上的第一帧.
我找不到任何看起来像我能做的东西的gm命令.有任何想法吗?
我正在尝试为实现特征的结构实现默认的迭代器。我的特征称为DataRow,代表一行表格单元格,看起来像这样:
pub trait DataRow<'a> {
// Gets a cell by index
fn getCell(&self, i: usize) -> &DataCell<'a>;
// Gets the number of cells in the row
fn getNumCells(&self) -> usize;
}
Run Code Online (Sandbox Code Playgroud)
我要提供的默认迭代器应使用这两种方法来迭代行并返回单元格引用。在Java中,这可以归结为一个DataRow实现的抽象类Iterable。在Rust中,我首先尝试使用IntoIterator:
impl<'a, T> IntoIterator for &'a T
where
T: DataRow<'a>,
{
type Item = &'a DataCell<'a>;
type IntoIter = DataRowIterator<'a, T>;
fn into_iter(self) -> DataRowIterator<'a, T> {
return DataRowIterator::new(self);
}
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为任何人都可以为自己的DataRow特征实现实现自己的迭代器。
我的第二次尝试是向itertrait 添加一个方法,该方法创建迭代器并返回它:
fn iter(&self) -> …Run Code Online (Sandbox Code Playgroud)