小编aro*_*oss的帖子

在Scala中键入Lambda:为什么声明中需要额外的括号?

介绍:

根据我的理解,类型声明{type ?[?] = Either[A, ?]}代表任何具有其他类型?[?]作为其成员的类型(与方法是类的成员完全相同).这是一种结构类型,即它的结构是它具有类型别名声明?[?]作为其成员.

在另一方面,({type ?[?] = Either[A, ?]})#?是指 ?由于经由类型的投影#.

题:

为什么{type ?[?] = Either[A, ?]}在进行类型投影时需要括号?为什么不只是{typeλ[α] = [A,α]}#λ?

换句话说,什么是确切的解析树({type ?[?] = Either[A, ?]})#?根据Scala的类型声明语法(见下文)?

为什么{type ?[?] = Either[A, ?]}#?这个语法中没有正确的"句子"?

  Type              ::=  FunctionArgTypes ‘=>’ Type
                      |  InfixType [ExistentialClause]
  FunctionArgTypes  ::=  InfixType
                      |  ‘(’ [ ParamType {‘,’ ParamType } ] ‘)’
  ExistentialClause ::=  ‘forSome’ ‘{’ ExistentialDcl
                             {semi ExistentialDcl} ‘}’ …
Run Code Online (Sandbox Code Playgroud)

grammar types scala

12
推荐指数
2
解决办法
376
查看次数

将PDF(透明度*和*CMYK)转换为jpg

我需要从PDF文件生成jpg图像(仅限第一页).PDF文件是用户生成的,因此它们可以包含任何内容.我目前正在使用以下代码:

// Load PDF.
$i = new Imagick;

// Create thumbnail of first page of PDF.
$i->setResolution(150, 150);
$i->loadImage("test.pdf[0]");
$i->thumbnailImage(640, 480, true);

// Remove transparency, fill transparent areas with white rather than black.
$i->setImageBackgroundColor("white");
$i->setImageAlphaChannel(11); // Imagick::ALPHACHANNEL_REMOVE
$i->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

// Output.
$i->writeImage("test.jpg");
Run Code Online (Sandbox Code Playgroud)

这符合预期,因为透明度变为白色而不是黑色.但是,我遇到了一些生成的jpg图像的问题,所以我跑jpeginfo了它们:

$ jpeginfo -c test.jpg
Run Code Online (Sandbox Code Playgroud)

test.jpg 960 x 480 32bit JFIF N 9481不支持的颜色转换请求[错误]

事实证明,一些源PDF实际上使用CMYK,并且在保存为jpg时显然不会转换为RGB.所以我将我的代码更改为以下(添加一行)以显式转换为RGB:

// Load PDF.
$i = new Imagick;

// Create thumbnail of first page of PDF.
$i->setResolution(150, 150);
$i->loadImage("test.pdf[0]");
$i->thumbnailImage(640, 480, true);

// Remove …
Run Code Online (Sandbox Code Playgroud)

php imagick

4
推荐指数
1
解决办法
2538
查看次数

标签 统计

grammar ×1

imagick ×1

php ×1

scala ×1

types ×1