假设我有这个图像:

我想将颜色数量减少到 3 种,如下所示:

为此,我应用了以下命令:
convert orange.jpg -remap palette.png orange_output.png
其中palette.png 看起来像这样:

有没有办法在不使用调色板图像的情况下执行此转换?理想情况下,我想提供一个颜色列表并让它以这种方式转换图像。
在Typescript中,可以使用字符串枚举创建记录类型:
enum AxisLabel { X = "X", Y = "Y" }
export const labelLookup: Record<AxisLabel, string> = {
[AxisLabel.X]: "X axis",
[AxisLabel.Y]: "Y Axis"
};
Run Code Online (Sandbox Code Playgroud)
我需要创建一个Record与上述对象类似的对象,但是我不希望使用字符串enum。
当我尝试这样的事情:
enum AxisLabel { X, Y }
export const labelLookup: Record<AxisLabel, string> = {
[AxisLabel.X]: "X axis",
[AxisLabel.Y]: "Y Axis"
};
Run Code Online (Sandbox Code Playgroud)
Typescript产生以下错误:
Type 'AxisLabel' does not satisfy the constraint 'string'.
可以使用数字和字符串作为成员名称来创建JS对象。
我希望在Typescript中做同样的事情,但不要求助于不安全的强制或强制类型转换。如何在Typescript中创建数字枚举Record <>类型而不使用字符串枚举any或类型转换?
我正在发布一个名为foonpm 注册表的 npm 包。我使用 compile-to-js 语言编写了这个包。为了理智起见,我将编译后的输出放入dist/项目目录的文件夹中。我package.json将入口点列为dist/entry.js:
{
"name": "foo",
"main": "dist/entry.js",
}
Run Code Online (Sandbox Code Playgroud)
有时,我想使用包中不属于入口点的文件。例如,有一个非常有用的导出称为whateverinside dist/util.js:
import { whatever } from "foo/dist/util";
Run Code Online (Sandbox Code Playgroud)
这有效,但强制我的包的用户输入dist/所有import语句是不方便的。
此外,重新导出所有可能的 util 函数并不是 DRY。我不想从 entrypoint 重新导出。
理想情况下,我想dist/使用以下语法导入文件:
import { whatever } from "foo/util"
Run Code Online (Sandbox Code Playgroud)
如何配置我package.json在dist/我的项目文件夹中搜索文件?
我有一个用例,我认为这对于Typescript的Pick类型是完美的.
这是一个精简的例子:
interface CreditCard {
name: string;
year: number;
expired: boolean;
}
function setValue(key: keyof CreditCard, value: Pick<CreditCard, typeof key>) {
// do stuff...
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试调用此函数时:
setValue("name", "rick");
Run Code Online (Sandbox Code Playgroud)
Typescript(2.3.4)给出以下错误:
error TS2345: Argument of type '"rick"' is not assignable to parameter of type 'Pick<CreditCard, "name" | "year" | "expired">'.
Run Code Online (Sandbox Code Playgroud)
另外,我没有CreditCard可用作为参数传入的实例,因此CreditCard在我的用例中不可能更改函数以作为第三个参数.
在上图中,我state错误地设置了默认值(this_is_not_ok不是State界面的一部分).不过,打字稿似乎并不介意.解决此问题的一种方法是显式添加类型注释.
我还可以使用以下方法解决问题constructor():
constructor(){
super();
this.state = {spelling_error: "wrong"};
}
为什么类型推断在第一个例子中不起作用?
在调试生产数据时,我有时会使用Rails控制台来检查和查询数据.
我更喜欢Rails(ActiveRecord)控制台到原始SQL客户端.
有没有办法告诉Rails在我的控制台会话期间不写入数据库以避免意外修改生产数据?
我可以定义一个函数的接口:
interface Handler {
(state: IState, action: IAction): IState;
}
Run Code Online (Sandbox Code Playgroud)
然后我可以声明一个满足接口的函数:
let selectRegimen: Handler = function(state, action) {
return state;
};
Run Code Online (Sandbox Code Playgroud)
但是命名(例如,而不是匿名)函数呢?显然,我可以做这样的事情:
let selectRegimen: Handler = function selectRegiment(state, action) {
return state;
};
Run Code Online (Sandbox Code Playgroud)
...但是这种语法感觉有些奇怪。有更好的方法来处理这个问题吗?
我正在尝试使用 Node.js 中的 Google Cloud Speech-to-Text API 转录 OGG OPUS Base64 编码的音频字符串。音频的采样率为 48000 赫兹。当我运行代码时,API 返回一个空转录。这只是有时发生。其他时候,它可以很好地转录音频。稍后再回到项目,发现错误是随机返回的。当我将 Base64 转换为缓冲区并保存文件时,音频在 VLC 播放器中播放正常,并且 ffprobe 显示结果文件的正确信息。
我已经尝试过检查音频质量、编码、采样率等,但这些解决方案都没有帮助。这是我的代码:
import { SpeechClient } from "@google-cloud/speech";
// `base64Audio` looks like this:
// "data:audio/ogg; codecs=opus;base64,T2dnUwACAAAAAAAA..."
export async function transcribeB64(base64Audio: string): Promise<string> {
const client = new SpeechClient();
return new Promise(async (resolve) => {
const content = base64Audio.split(",")[1];
const x = await client.recognize({
config: {
encoding: "OGG_OPUS",
sampleRateHertz: 48000,
languageCode: "en-US",
},
audio: {
content,
},
});
resolve(JSON.stringify(x, null, 2)); …Run Code Online (Sandbox Code Playgroud) typescript ×4
activerecord ×1
enums ×1
image ×1
imagemagick ×1
node.js ×1
npm ×1
ogg ×1
opus ×1
package.json ×1
rmagick ×1
webm ×1