📄 cmsresourcetypeimage.java
字号:
/*
* File : $Source: /usr/local/cvs/opencms/src/org/opencms/file/types/CmsResourceTypeImage.java,v $
* Date : $Date: 2006/07/20 12:38:54 $
* Version: $Revision: 1.15 $
*
* This library is part of OpenCms -
* the Open Source Content Mananagement System
*
* Copyright (c) 2005 Alkacon Software GmbH (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software GmbH, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.file.types;
import org.opencms.configuration.CmsConfigurationException;
import org.opencms.db.CmsSecurityManager;
import org.opencms.file.CmsFile;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsProperty;
import org.opencms.file.CmsPropertyDefinition;
import org.opencms.file.CmsResource;
import org.opencms.file.CmsResourceFilter;
import org.opencms.file.CmsVfsException;
import org.opencms.loader.CmsDumpLoader;
import org.opencms.loader.CmsImageLoader;
import org.opencms.loader.CmsImageScaler;
import org.opencms.main.CmsException;
import org.opencms.main.CmsLog;
import org.opencms.main.OpenCms;
import org.opencms.security.CmsPermissionSet;
import org.opencms.security.CmsSecurityException;
import org.opencms.util.CmsStringUtil;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
/**
* Resource type descriptor for the type "image".<p>
*
* @author Alexander Kandzior
*
* @version $Revision: 1.15 $
*
* @since 6.0.0
*/
public class CmsResourceTypeImage extends A_CmsResourceType {
/**
* A data container for image size and scale operations.<p>
*/
protected class CmsImageAdjuster {
/** The image byte content. */
private byte[] m_content;
/** The (optional) image scaler that contains the image downscale settings. */
private CmsImageScaler m_imageDownScaler;
/** The image properties. */
private List m_properties;
/** The image root path. */
private String m_rootPath;
/**
* Creates a new image data container.<p>
*
* @param content the image byte content
* @param rootPath the image root path
* @param properties the image properties
* @param downScaler the (optional) image scaler that contains the image downscale settings
*/
public CmsImageAdjuster(byte[] content, String rootPath, List properties, CmsImageScaler downScaler) {
m_content = content;
m_rootPath = rootPath;
m_properties = properties;
m_imageDownScaler = downScaler;
}
/**
* Calculates the image size and adjusts the image dimensions (if required) accoring to the configured
* image downscale settings.<p>
*
* The image dimensions are always calculated from the given image. The internal list of properties is updated
* with a value for <code>{@link CmsPropertyDefinition#PROPERTY_IMAGE_SIZE}</code> that
* contains the calculated image dimensions.<p>
*/
public void adjust() {
CmsImageScaler scaler = new CmsImageScaler(getContent(), getRootPath());
if (!scaler.isValid()) {
// error calculating image dimensions - this image can't be scaled or resized
return;
}
// check if the image is to big and needs to be rescaled
if (scaler.isDownScaleRequired(m_imageDownScaler)) {
// image is to big, perform rescale operation
CmsImageScaler downScaler = scaler.getDownScaler(m_imageDownScaler);
// perform the rescale using the adjusted size
m_content = downScaler.scaleImage(m_content, m_rootPath);
// image size has been changed, adjust the scaler for later setting of properties
scaler.setHeight(downScaler.getHeight());
scaler.setWidth(downScaler.getWidth());
}
CmsProperty p = new CmsProperty(CmsPropertyDefinition.PROPERTY_IMAGE_SIZE, null, scaler.toString());
// create the new property list if required (don't modify the original List)
List result = new ArrayList();
if ((m_properties != null) && (m_properties.size() > 0)) {
result.addAll(m_properties);
result.remove(p);
}
// add the updated property
result.add(p);
// store the changed properties
m_properties = result;
}
/**
* Returns the image content.<p>
*
* @return the image content
*/
public byte[] getContent() {
return m_content;
}
/**
* Returns the image properties.<p>
*
* @return the image properties
*/
public List getProperties() {
return m_properties;
}
/**
* Returns the image VFS root path.<p>
*
* @return the image VFS root path
*/
public String getRootPath() {
return m_rootPath;
}
}
/** The log object for this class. */
public static final Log LOG = CmsLog.getLog(CmsResourceTypeImage.class);
/**
* The value for the {@link CmsPropertyDefinition#PROPERTY_IMAGE_SIZE} property if resources in
* a folder should never be downscaled.<p>
*/
public static final String PROPERTY_VALUE_UNLIMITED = "unlimited";
/** The image scaler for the image downscale operation (if configured). */
private static CmsImageScaler m_downScaler;
/** Indicates that the static configuration of the resource type has been frozen. */
private static boolean m_staticFrozen;
/** The static resource loader id of this resource type. */
private static int m_staticLoaderId;
/** The static type id of this resource type. */
private static int m_staticTypeId;
/** The type id of this resource type. */
private static final int RESOURCE_TYPE_ID = 3;
/** The name of this resource type. */
private static final String RESOURCE_TYPE_NAME = "image";
/**
* Default constructor, used to initialize member variables.<p>
*/
public CmsResourceTypeImage() {
super();
m_typeId = RESOURCE_TYPE_ID;
m_typeName = RESOURCE_TYPE_NAME;
}
/**
* Returns the image downscaler to use when writing an image resource to the given root path.<p>
*
* If <code>null</code> is returned, image downscaling must not be used for the resource with the given path.
* This may be the case if image downscaling is not configured at all, or if image downscaling has been disabled
* for the parent folder by setting the folders property {@link CmsPropertyDefinition#PROPERTY_IMAGE_SIZE}
* to the value {@link #PROPERTY_VALUE_UNLIMITED}.<p>
*
* @param cms the current OpenCms user context
* @param rootPath the root path of the resource to write
*
* @return the downscaler to use, or <code>null</code> if no downscaling is required for the resource
*/
public static CmsImageScaler getDownScaler(CmsObject cms, String rootPath) {
if (m_downScaler == null) {
// downscaling is not configured at all
return null;
}
// try to read the image.size property from the parent folder
String parentFolder = CmsResource.getParentFolder(rootPath);
parentFolder = cms.getRequestContext().removeSiteRoot(parentFolder);
try {
CmsProperty fileSizeProperty = cms.readPropertyObject(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -