小编Bla*_*ift的帖子

SVG和DPI,绝对单位和用户单位:Inkscape vs. Firefox vs. ImageMagick

我尝试自动生成一个打印在特定尺寸(A4)上的SVG文件.我希望在其中使用一个路径,它只允许"用户单位",而不是"绝对单位".

在我看来,无法"发布"具有绝对单位(例如文档大小)和任何地方的路径的SVG文件,因为我无法让它在整个查看器中正常工作.

有没有办法在渲染中获得一些一致性,比如指定'默认DPI'?

或者换一种说法:我可以得到下面的例子,在不放弃绝对单位的情况下在所有观众中呈现相同的内容吗?

相关:有没有办法强制下面的任何应用程序以与其他应用程序相同的方式呈现图像?(例如,我尝试了-density'convert'选项,但我无法获得与Inkscape或Firefox输出相匹配的输出.)


例:

我创建了一个SVG文件,其中三个黑色方块(rect)带有红色对角线(路径):

  • 左:用户单位中的正方形和对角线
  • 中间:正方形和对角线(在我看来是最合乎逻辑的选择,但不允许)
  • 右:平方毫米,用户单位对角线

在不同的观看者中呈现的方式不同:

  • Inkscape:90 DPI,所有方块大小相同,红色对角线匹配
  • Firefox:96 DPI?,后面的方块到大(或从对角到短)
  • 转换:72 DPI,后方为小(或从对角线到长)

代码:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   version="1.1"
   width="200mm"
   height="100mm"
   >
  <g transform="translate(50,50)">
    <rect
       width="100."
       height="100."
       x="10"
       y="10" />
    <path style="stroke: #ff0000" d="M 10 10 L 110 110" />
  </g>
  <g transform="translate(200,50)">
    <rect
       width="1.111in"
       height="1.111in"
       x="0.1111in"
       y="0.1111in" />
    <path style="stroke: #ff0000" d="M 0.1111in 0.1111in L 1.111in 1.111in" />
  </g>
  <g transform="translate(350,50)">
    <rect
       width="1.111in"
       height="1.111in"
       x="0.1111in"
       y="0.1111in" /> …
Run Code Online (Sandbox Code Playgroud)

svg

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

什么时候(为什么)引入Python`__new __()`?

何时(为什么)__new__()引入了Python 函数?

创建类的实例需要三个步骤,例如MyClass()

  • MyClass.__call__()叫做。此方法必须在的元类中定义MyClass
  • MyClass.__new__()被调用__call__MyClass自行定义。这将创建实例。
  • MyClass.__init__()被(也称为__call__)。这将初始化实例。

实例的创建会受到重载__call__或的影响__new__。通常没有理由重载__call__而不是重载__new__(例如,使用元类的__call__方法而不是__new__?)。

我们有一些旧代码(仍然运行得很强大!),其中__call__的重载位置。给出的原因是__new__当时尚不可用。因此,我尝试了解有关Python和我们的代码的历史的更多信息,但是我不知道何时__new__引入。

__new__出现在用于Python 2.4文档,而不是在那些Python 2.3中,但它不会出现在whathsnew任何Python 2中的版本。我可以找到的第一个提交__new__(将descr-branch合并回主干。)是2001年开始的,但是“ back into trunk”消息表明以前有过。几个月前的PEP 252(使类型看起来更像类)PEP 253(对内置类型进行子类型化)似乎很重要。

学习更多有关引入的知识__new__将使我们更多地了解Python为何如此。


编辑以澄清:

似乎class.__new__重复了所提供的功能metaclass.__call__。添加仅以更好的方式复制现有功能的方法似乎不符合Pythonic。

__new__是您可以直接使用的少数几个类方法之一(cls例如,第一个参数),从而引入了以前没有的复杂性。如果类是函数的第一个参数,则可以认为该函数应该是元类的常规方法。但是该方法已经存在:__call__()。我觉得我想念什么。

应该有一种-最好只有一种-显而易见的方法。

python oop python-2.x

14
推荐指数
2
解决办法
803
查看次数

pylab 中的顶部和底部轴(例如,具有不同的单位)(或左右)

我正在尝试使用 pylab/matplotlib 绘制绘图,并且我有两组不同的 x 轴单位。所以我希望绘图具有两个不同刻度的轴,一个在顶部,一个在底部。(例如,一个是英里,一个是公里左右。)

类似于下图(但我想要多个 X 轴,但这并不重要。)

带 JpGraph 的多轴

任何人都知道pylab是否可以做到这一点?

python plot axes matplotlib

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

是否可以指定类方法的“cls”参数,就像普通方法的“self”一样?

是否可以显式指定cls类方法的参数?

例如,这工作正常,但n不使用self,因此应该是一个类方法:

class A():
    def n(self):
        print(self.__class__.__name__)

class B(A):
    pass

A.n(self=B())
Run Code Online (Sandbox Code Playgroud)

但以下内容不起作用,虽然它对我来说似乎相当:

class A():
    @classmethod
    def n(cls):
        print(cls.__name__)

class B(A):
    pass

A.n(cls=B)
Run Code Online (Sandbox Code Playgroud)

产生的异常是

TypeError: n() got multiple values for argument 'cls'
Run Code Online (Sandbox Code Playgroud)

XY问题分析:我有很多类方法,并且A有很多类派生自A. 这本质上就是我想做的:

class A():
    @classmethod
    def n1(cls): print("1", cls.__name__)
    @classmethod
    def n2(cls): print("2", cls.__name__)
    @classmethod
    def n3(cls): print("3", cls.__name__)

class B(A): pass
class C(A): pass
class D(A): pass
class E(A): pass
class F(A): pass

for cls in [B, C, …
Run Code Online (Sandbox Code Playgroud)

python

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

标签 统计

python ×3

axes ×1

matplotlib ×1

oop ×1

plot ×1

python-2.x ×1

svg ×1