小编Rob*_*ert的帖子

如何将大型SVG文件转换为平铺PNG?

我有一个大的SVG文件(大约60 MB,10000x10000像素但有可能变大),我想要创建许多平铺的256x256 PNG图像(在这个例子中会有1600个图像) ;圆形(10000/256)^ 2).

有没有人知道如何在Web服务器上执行此操作(运行PHP等)?我想过rsvg,但它似乎没有任何功能来修改边界框(我宁愿避免为每个部分手动操作).ImageMagick也许可以做到,但我没有太多运气让它运转起来.使用rsvg创建一个大的PNG,然后使用专用于拼贴非常大的图像的工具可能会有效,但我没有运气找到这样的东西!速度并不是一个真正的问题,虽然它是可取的,所以如果最坏的情况发生,我可能会考虑修改SVG的每个部分的边界框.不过,我可以看到这一代人永远在走!

有谁知道这样做的任何方法?

编辑2016-03-02:

我最近再次回到需要这个问题的答案,并且Inkscape似乎是唯一能够以给定大小呈现特定区域的SVG的工具(svgexport几乎满足这些要求,但它不允许您更改宽高比) .

我的目标是将SVG平铺到256x256磁贴中,现在我已经成功制作了一个脚本,可以通过重复渲染inkscape大约16,000 x 16,000并平铺生成的图像来平铺任意大的SVG .我已成功渲染尺寸超过500,000 x 500,000像素的SVG - 内存使用没有问题(这需要很长时间!)

php linux svg imagemagick rsvg

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

是否可以拥有一个实例数组,这些实例采用通用参数而不知道(或关心)参数是什么?

考虑以下测试用例,其中包含一个'factory'类,它可以调用它包含的闭包,提供一些'defaultaultable'类型的新实例:

protocol Defaultable {
    init()
}

extension Int:    Defaultable { }
extension Double: Defaultable { }
extension String: Defaultable { }

class Factory<T : Defaultable> {
    let resultHandler: (T) -> ()

    init(resultHandler: (T) -> ()) {
        self.resultHandler = resultHandler
    }

    func callResultHandler() {
        resultHandler(T.init())
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我单独使用它时,这很好用,我可以跟踪泛型类型:

// Create Int factory variant...
let integerFactory = Factory(resultHandler: { (i: Int) in print("The default integer is \(i)") })

// Call factory variant...
integerFactory.callResultHandler()
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我想以一种无法跟踪泛型类型的方式使用工厂,它就不能很好地工作:

// Create a queue of factories of some …
Run Code Online (Sandbox Code Playgroud)

generics swift

5
推荐指数
1
解决办法
110
查看次数

为什么Swift在将可选String转换为UnsafePointer时返回一个意外的指针?

我注意到在使用带有字符串的C库const char *(它被转换为Swift as UnsafePointer<Int8>!)时出现了一些不寻常的行为; 通过String按预期工作,但String?似乎破坏了输入.考虑我写的测试:

func test(_ input: UnsafePointer<UInt8>?) {
    if let string = input {
        print(string[0], string[1], string[2], string[3], string[4], string[5])
    } else {
        print("nil")
    }
}

let input: String = "Hello"

test(input)
Run Code Online (Sandbox Code Playgroud)

这按预期工作,为输入字符串打印以null结尾的UTF-8字节列表: 72 101 108 108 111 0

但是,如果我将输入更改为可选字符串,那么它将变为:

let input: String? = "Hello"
Run Code Online (Sandbox Code Playgroud)

我在result(176 39 78 23 1 0)中得到了一组完全不同的值,即使我希望它是相同的.传递nil按预期工作.

C库的函数允许NULL代替字符串,我有时也希望在Swift中传递它,因此输入字符串是可选的.

这是Swift中的一个错误,还是Swift没有设计来处理这种情况?无论哪种方式,处理这种情况的最佳方法是什么?

编辑

它似乎与多个参数有关.C函数:

void multiString(const char *arg0, const char *arg1, const char …
Run Code Online (Sandbox Code Playgroud)

swift

5
推荐指数
1
解决办法
355
查看次数

如何在 SCNTechnique 中使用模板?

基本上,我想在一个立方体周围渲染一个轮廓。为此,我想我可以使用SCNTechnique具有以下渲染通道的 :

  1. 正常渲染立方体,并将它们占用的像素写入模板缓冲区。
  2. 如果它们在第一遍中不与模板相交,则渲染稍大的立方体。

问题是,模板中的文档SCNTechnique非常稀少,我无法确切地知道如何使用它。

我已经通过首先在禁用深度测试的情况下绘制较大的“轮廓立方体”然后再绘制普通立方体来成功绘制轮廓,这效果很好,但是由于这种方法的其他复杂性,我想改用模板。

在尝试使用模板缓冲区使其工作时,我的第一遍stencilStates看起来像(以及我认为我需要这些属性的原因):

clear = YES  // To clear the buffer from last 
enable = YES // To write to the buffer
behavior:
    writeMask = 1     // Use bit 1
    function = always // Always write to stencil regardless?
Run Code Online (Sandbox Code Playgroud)

第二遍的stencilStates样子:

clear = NO   // Keep the buffer from last step
enable = NO  // Don't write to the buffer (only read?)
behavior:
    readMask = 1      // Use bit …
Run Code Online (Sandbox Code Playgroud)

stencil-buffer scenekit scntechnique

5
推荐指数
1
解决办法
1251
查看次数

在Sass中匹配多个BEM修饰符

我正在使用BEM,并且有一个包含多个修饰符的元素:

<div class="block__element block__element--m1 block__element--m2"></div>
Run Code Online (Sandbox Code Playgroud)

我正在使用SCSS并利用它来编写与BEM兼容的嵌套规则.如果我想编写一个规则,其中元素(如上所述)同时具有m1和m2修饰符,是否有一种方法可以编写与我当前编写它们的方式兼容的方法?这是我之后的语法,但会导致语法错误:

.block {
    display: block;

    &__element {
        display: inline;

        &--m1 {
            background-color: red;
        }

        &--m2 {
            background-color: green;
        }

        // Syntax error
        &--m1&--m2 {
            background-color: yellow;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过使用属性选择器来想办法,但有更简洁的方法吗?

对于记录,编译的属性选择器应该是:

.block__element--m1.block__element--m2
Run Code Online (Sandbox Code Playgroud)

css sass bem

5
推荐指数
1
解决办法
2169
查看次数

如何在本地闭包内调用非转义闭包?

我有一个看起来像这样的函数:

func test(closure: () -> ()) {
    let localClosure = { closure() }

    localClosure()
}
Run Code Online (Sandbox Code Playgroud)

这只是一个例子,并没有完全反映我遇到的问题,显然在这里我可以closure直接调用!

应该清楚的是,在上面的代码中,closure无法逃避.但是,我收到错误:

关闭使用非转义参数'closure'可能允许它逃脱

现在,如果localClosure以某种方式逃避,我会理解这个错误,但它并没有逃脱.我甚至尝试注释localClosure@noescape(尽管在Swift 3中该属性已被弃用),并且根据我得到的警告:

@noescape是默认值,不推荐使用

如果localClosure是,默认情况下,非转义,那么为什么不能再进入另一个非转义闭包呢?或者这是编译器的错误/限制?

closures swift swift3

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

我怎么能确定调用`String.Index.advancedBy`不会导致崩溃?

如果前进的距离太大,则调用advancedBya String.CharacterView.Index将导致EXC_BAD_ACCESS.这可以在这里看到:

let inputString = "Hello, world!"
let index = inputString.startIndex
let distance = 100
let newIndex = index.advancedBy(distance) // fatal error: cannot increment endIndex
Run Code Online (Sandbox Code Playgroud)

现在,如果index已经从字符串中提前了startIndex一些未知的次数,并且distance是一些不安全的用户输入?如何验证按指定距离推进指数不会导致崩溃?

string swift

2
推荐指数
1
解决办法
165
查看次数

iOS何时删除非活动约束

我注意到在某些情况下,我在Swift中的一个约束上设置isActive = false后,当我稍后尝试访问它时它是nil,但情况并非总是如此.在一种情况下,我有两个视图控制器,并且在viewWillAppear中的约束上都设置isActive为false,但是在一个视图中,约束稍后可用,我可以设置isActive = true而在另一个视图中它是nil.

什么会导致这种行为?我能够通过将优先级设置为1或900来绕过它,但它仍然留下了背景中真正发生的事情的问题.

ios autolayout

2
推荐指数
1
解决办法
137
查看次数