小编mse*_*mys的帖子

如何使用pydicom创建JPEG压缩的DICOM数据集?

我正在尝试使用pydicom创建JPEG压缩的DICOM图像。可以在此处找到有关彩色DICOM图像的不错的原始资料,但这主要是理论和C ++。在下面的代码示例中,我在内部创建了一个淡蓝色的省略号output-raw.dcm(未压缩),如下所示:

示例DICOM图像

import io
from PIL import Image, ImageDraw
from pydicom.dataset import Dataset
from pydicom.uid import generate_uid, JPEGExtended
from pydicom._storage_sopclass_uids import SecondaryCaptureImageStorage

WIDTH = 100
HEIGHT = 100


def ensure_even(stream):
    # Very important for some viewers
    if len(stream) % 2:
        return stream + b"\x00"
    return stream


def bob_ross_magic():
    image = Image.new("RGB", (WIDTH, HEIGHT), color="red")
    draw = ImageDraw.Draw(image)
    draw.rectangle([10, 10, 90, 90], fill="black")
    draw.ellipse([30, 20, 70, 80], fill="cyan")
    draw.text((11, 11), "Hello", fill=(255, 255, 0))
    return …
Run Code Online (Sandbox Code Playgroud)

python jpeg imaging dicom pydicom

13
推荐指数
1
解决办法
207
查看次数

两个不可变的列表 - 如何使三重平等工作?

假设我们有一个使用Facebook的伟大的Immutable.js创建的不可变对象.我想比较使用单个源.map.filter从单个源生成的两个列表,并确保它们是相同的.在我看来,当使用map/filter时,你正在创建一个与前一个对象无关的新对象.如何使三重平等===工作?它有意义吗?

var list = Immutable.List([ 1, 2, 3 ]);
var list1 = list.map(function(item) { return item; })
var list2 = list.map(function(item) { return item; })

console.log("LIST1 =", list1.toJS())      // [1, 2, 3]
console.log("LIST2 =", list2.toJS())      // [1, 2, 3]
console.log("EQUAL ===?", list1===list2); // false! Why? How?
Run Code Online (Sandbox Code Playgroud)

你可以在这里玩它:http://jsfiddle.net/eo4v1npf/1/

上下文

我正在使用React + Redux构建应用程序.我的州有一个列表,其中包含具有以下属性的项目selected:

items: [
    {id: 1, selected: true},
    {id: 2, selected: false},
    {id: 3, selected: false},
    {id: 4, …
Run Code Online (Sandbox Code Playgroud)

javascript immutability reactjs immutable.js redux

10
推荐指数
1
解决办法
2655
查看次数

在TypeScript中设置必需的属性

在TypeScript中根据需要标记某些属性的正确方法是什么?假设我们有某个对象,它必须包含id字段,但也可以包含任意数量的其他字段:

interface SomeType {
    id: number;
}

let obj: SomeType = { name: "OBJ" };           // GOOD ERROR! We must have `id`
let obj: SomeType = { id: 123 };               // OK
let obj: SomeType = { id: 123, name: "OBJ" };  // BAD ERROR! I just want to add a name
Run Code Online (Sandbox Code Playgroud)

我知道您可以使用问号制作可选属性,如下所示:

interface SomeType {
    id: number;
    name?: string;
    engine?: string;
    mother?: string;
}
Run Code Online (Sandbox Code Playgroud)

但我不希望每次都通过添加和混合不相关的东西来修改这个界面.

另一种选择当然是创建一组接口,每个接口扩展主接口,但听起来像很多代码行:

interface SomeType { …
Run Code Online (Sandbox Code Playgroud)

interface typescript redux

7
推荐指数
1
解决办法
4116
查看次数

REST API 状态为整数还是字符串?

我和我的同事正在研究 REST API。我们一直在争论资源/项目的状态应该是字符串还是整数——我们都需要读取、理解和修改该资源(使用单独的应用程序)。由于这是一个非常普遍的主题,谷歌没有帮助解决这个争论。我想知道您的经验是什么以及哪种方式更好。

例如,假设我们有Job资源,可以通过 URI http://example.com/api/jobs/someid访问该资源,并且它具有以下 JSON 表示形式,存储在 NoSQL DB 中:

JOB A:
{
   "id": "someid",
   "name": "somename",
   "status": "finished"  // or "created", "failed", "compile_error"
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是 - 也许它应该更像是以下?

JOB B:
{
   "id": "someid",
   "name": "somename",
   "status": 0  // or 1, 2, 3, ...
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我们每个人都必须创建一个地图,用它来理解应用程序逻辑中的状态。但我自己倾向于第一个,因为它更具可读性......您也可以轻松地混淆“0”(字符串)和0(数字)。

然而,由于 API 是被机器使用的,所以可读性并不那么重要。使用数字还有一些其他优点 - 在控制台中使用应用程序时它被广泛接受,并且当您想要包含任意新的失败状态时,它会很有用,例如:

  • status == 50 - 表示您的网络组件 X 有问题,
  • status > 100 - 表示一些多种特殊情况。

当您有数字时,您不需要为它们组成所有这些字符串名称。那么您认为哪种方式最好?也许我们需要多个字段(这可能会让事情变得有点混乱):

JOB C:
{
   "id": "someid",
   "name": "somename",
   "status": …
Run Code Online (Sandbox Code Playgroud)

database rest json nosql

6
推荐指数
1
解决办法
4684
查看次数