Featured post

Docker setup for Liferay 7 with MySQL

Showing posts with label Image Gallery. Show all posts
Showing posts with label Image Gallery. Show all posts

Tuesday, 3 April 2012

How to migrate existing data and configure to use image.hook.impl or dl.hook.impl in Liferay

Sometimes we have to change the File storage Location through HOOK IMPL to Database or File System.
In that scenario we also have to migrate existing data which is already stored through previous HOOK.

Here is the solution -

1) Go to Document library/image gallery,click Export/import option on the top of rightside of the portlet,
click 'export' button for export the content & save the lar.

2) Stop the server and add "image.hook.impl=com.liferay.portal.image.FileSystemHook" in portal-ext properties
& comment the "#image.hook.impl=com.liferay.portal.image.DatabaseHook" in portal-ext properties.

3) Clear the database cache from serverAdministration and delete work temp folders in tomcat.

4) Start the server, Go to Document library/image gallery and 'import' the lar file.

Please let me know if you have any questions.



Your are just done, Try & Enjoy the function.....:)

Monday, 9 January 2012

Crop Image in Liferay for Images of Image Gallery or Profile Images


Cropping is the way to set/cut image as per your requirement. You can set height/width of the whichever area of the image, you want.
As we all knows that Liferay's Image Gallery does not provide function to crop an Image, so it's time to develop our own.

Steps to to Crop an Image in Liferay-
1) Copy these two functions into your JAVA file or you can simplify the path by creating an ext of com.liferay.portal.image.FileSystemHook.

private static File getFile(long imageId, String type) {
String path = buildPath(String.valueOf(imageId));
String _rootDir=PropsUtil.get("image.hook.file.system.root.dir");
return new File(
_rootDir + StringPool.SLASH + path + StringPool.SLASH +
imageId + StringPool.PERIOD + type);
}
private static String buildPath(String fileNameFragment) {
int fileNameFragmentLength = fileNameFragment.length();

if (fileNameFragmentLength <= 2) {
return StringPool.BLANK;
}

StringBundler sb = new StringBundler(
fileNameFragmentLength / 2 + fileNameFragmentLength);

for (int i = 0; i < fileNameFragmentLength; i += 2) {
if ((i + 2) < fileNameFragmentLength) {
sb.append(StringPool.SLASH);
sb.append(fileNameFragment.substring(i, i + 2));
}
}

return sb.toString();
}

2) You can use any jQuery plugin like tapmodo-Jcrop or Javascript to get co-ordinates of Image or preview Image before croping.

3) Then write below action as per your requirements, i keep it as simple as i can.

public static void cropImage(
ActionRequest request, ActionResponse response) throws PortalException, SystemException, IOException{
long imageId=ParamUtil.getLong(request,"imageId");
String imageType=ImageLocalServiceUtil.getImage(imageId).getType();

BufferedImage outImage=ImageIO.read(getFile(imageId, imageType));
/*
x1,y1,x2,y2 are the co-ordinates, will be passed as parameters used to crop the image.
*/
BufferedImage cropped=outImage.getSubimage(ParamUtil.getInteger(request, "x1"),ParamUtil.getInteger(request, "y1"),
ParamUtil.getInteger(request, "w"),ParamUtil.getInteger(request, "h"));

ImageIO.write(cropped,imageType,
new FileOutputStream(getFile(imageId, imageType)));
ImageLocalServiceUtil.updateImage(imageId,getFile(imageId, imageType));
outImage.flush();
cropped.flush();
}

4) Try & Enjoy the function :)