java thumbnail oluşturma

asp.net de uzun süredir kullandığım sevdiğim bir şey bu. bir kod yazıyorsunuz o kod gidip image resize edip istediğiniz gibi getiriyor.


<%@page import="java.io.ByteArrayInputStream"%>
<%@page import="java.io.ByteArrayOutputStream"%>
<%@ page language="java" contentType="image/png" pageEncoding="UTF-8"%>
<%@page import="com.mascix.tools.CacheManager"%>
<%@page import="java.util.Calendar"%>
<%@page import="org.apache.commons.lang.time.DateUtils"%>
<%@page import="org.apache.commons.lang.StringUtils"%>
<%@page import="com.mortennobel.imagescaling.DimensionConstrain"%>
<%@page import="com.mortennobel.imagescaling.ResampleOp"%>
<%@page import="javax.imageio.ImageIO"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="java.io.File"%>
<%
int width = (!StringUtils.isEmpty(request.getParameter("w"))) ? Integer.valueOf(request.getParameter("w")) : 150;
String path = request.getParameter("p");
if (StringUtils.isEmpty(path))
path = "/1.jpg";
BufferedImage b =null;

if (CacheManager.get(path) == null) {
BufferedImage image = ImageIO.read(new File(application.getRealPath(path)));

ResampleOp rop = new ResampleOp(DimensionConstrain.createMaxDimension(width, -1));
rop.setNumberOfThreads(4);
b = rop.filter(image, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(b, "png", baos);
byte[] bytesOut = baos.toByteArray();
CacheManager.put(path, (Object) bytesOut);
} else{
byte[] bytesOut =(byte[])CacheManager.get(path);
b = ImageIO.read(new ByteArrayInputStream(bytesOut));
}
response.setHeader("Last-Modified", DateUtils.addDays(Calendar.getInstance().getTime(), 2*360).toGMTString());
response.setHeader("Expires", DateUtils.addDays(Calendar.getInstance().getTime(), 2*360).toGMTString());
out.clear();
ImageIO.write(b, "png", response.getOutputStream());
%>

ve bu dosyayı kullanmak için en basitinden /thumb.jsp?p=/birfolder/resim.jpg demeniz yeterli w değişkenini vermezseniz direk 150 pixel yapılıyor width. birde bağımlılığı var oda burda acaba yüksek yükde nasıl çalışır bu kod şöyle anlık 50 yada günlük 50 bin kişi falan girse. SEO ready olması ve bir kere verdiği şeyi browsera cacheletmesi bu açıdan çok yüksek rakamlar görebilir gibi düşündürüyor bana bakalım.

Leave a Reply

Your email address will not be published. Required fields are marked *