2012-08-13 51 views
2

我有我的Plone的页面模板下面的代码:的Plone:缩放图像

<img 
tal:define="folderimagetitle python:context.getField('folderimagetitle').getAccessor(context)()" 
tal:condition="folderimagetitle" 
src="" 
alt="" 
tal:replace="structure python:context.getWrappedField('folderimage').tag(context, alt=folderimagetitle, css_class='photo')" 
/> 

基本上我想要显示的图像的H1标签旁边。图像将工作并显示正常,但会显示完整图像大小与文本不一致。我也不想仅添加高度和宽度属性,因为这会导致图像的边缘粗糙,并且效果不好。

如何将其缩小到Plone中可用的默认尺寸之一,即列表,图标,平铺,缩略图,小图,预览和大图?

回答

5

“现代”的方式是使用plone.app.imaging。

<img tal:define="scales context/@@images; 
       thumbnail python: scales.scale('image', width=64, height=64);" 
    tal:condition="thumbnail" 
    tal:attributes="src thumbnail/url; 
        width thumbnail/width; 
        height thumbnail/height" /> 

http://plone.org/products/plone.app.imaging/

+0

完美工作。谢谢。 – Frankline 2012-08-13 14:28:30

5

接受的答案是非常完美的,但这里的它是如何工作的额外提示:

的/ @@图像上下文是任何对象gettable类型,但是scales.scale()的第一个参数是必须在该上下文中使用.getField(name)的gettable字段名称。

因此,举例来说,如果你有这暴露在视图/图像的图像列表图库视图,您可以使用:

<li tal:repeat="image view/images"> 
<img tal:define="scales image/@@images; 
       img python: scales.scale('image', width=100, height=100);" 
    tal:attributes="src img/url"> 
</li> 

特别要注意你不能只传递一个图像实例作为:

scales context/@@images; <--- Don't do this. You need the @@images for an Image 
scales.scale(instance, width=10, height=10); 

如果由于某种原因,你需要做到这一点的语言其他比TAL,关键是要使用restrictedTraverse()来获得“@@图像”背景下,这样的:

%if request.context.children.has(0, 'ATBlob'): 
    <% 
     # NB. The 'ATBlob' is the concrete Image instance 
     image = request.context.children.nth(0, 'ATBlob') 
     scales = image.restrictedTraverse('@@images') 
     scaled_image = scales.scale('image', width=100, height=100) 
    %> 
    ${scaled_image} 
%endif