Expand my Community achievements bar.

Dive into Adobe Summit 2024! Explore curated list of AEM sessions & labs, register, connect with experts, ask questions, engage, and share insights. Don't miss the excitement.
SOLVED

How to change programmatically generated static rendition's name

Avatar

Level 5

Hi There,

 

I am trying to generate a rendition for an image programmatically. And not able to change the rendition name.

Like as shown in the below image we have a rendition of " web 22x22". Now ask is to change this web to some other string (say "logo").

 

Screenshot (43).png

 

Code Snippet for rendition generation :


@Component(
service = WorkflowProcess.class,
property = {"process.label=Rendition Generator", Constants.SERVICE_DESCRIPTION
+ "= Create custom renditions for DAM asset"})
public class AssetRenditionMaker implements WorkflowProcess {

@Reference
private XyzServiceResolver XyzServiceResolver;

@Reference
private RenditionMaker renditionMaker;

@Reference
private AssetHandler assetHandler;

@Override
public void execute(final WorkItem workItem, final WorkflowSession workflowSession, final MetaDataMap metaDataMap) throws WorkflowException {
try (ResourceResolver serviceResolver = XyzServiceResolver.getServiceResolver()) {
final String payloadString = workItem.getWorkflowData().getPayload().toString();
final Resource resource = serviceResolver.getResource(payloadString);
if (null != resource) {
final Asset asset = resource.adaptTo(Asset.class);
if (null != asset) {
final int width = 22;
final int height = 22;
final int quality = 100;
final String mimeType = "Logo";
final String[] mimeTypesToKeep = {"image/jpeg", "image/png"};
final RenditionTemplate template = renditionMaker.createWebRenditionTemplate(asset, width, height, quality, mimeType, mimeTypesToKeep);
final List<Rendition> renditions = renditionMaker.generateRenditions(asset, template);
// using Asset Handler Api create thumbnails using the rendition for the asset.
final Collection<ThumbnailConfig> configs = null;
for (Rendition rendition : renditions) {
assetHandler.createThumbnails(asset, rendition, configs);
}
serviceResolver.commit();

}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}



 

Please do share your suggestions.

 

Thanks,

Ravi Joshi

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @ravi_joshi ,

I would suggest to use RenditionMaker API and Assethandler API to create our own renditions for a particular image asset. Please refer below piece of code

private void createRenditions(Asset asset) {
if (asset != null) {
for (String rendition : renditions) {
String[] renditionValues = rendition.split(":");
if (renditionValues.length == 3) {
String renditionWidthValue = renditionValues[0];
int renditionWidth = Integer.parseInt(renditionWidthValue);
String renditionHeightValue = renditionValues[1];
int renditionHeight = Integer.parseInt(renditionHeightValue);
boolean center = Boolean.parseBoolean(renditionValues[2]);
RenditionTemplate thumbnailTemplate = renditionMaker.createThumbnailTemplate(asset,
renditionWidth, renditionHeight, center);
List<Rendition> renditions = renditionMaker.generateRenditions(asset, thumbnailTemplate);
for (Rendition r : renditions) {
asset.addRendition("cq5dam.thumbnail.".concat(renditionWidthValue).concat(".")
.concat(renditionHeightValue).concat(".png"), r.getStream(), "image/png");
}
}
}
}
}

Hope that helps!

Regards,

Santosh

 

View solution in original post

2 Replies

Avatar

Correct answer by
Community Advisor

Hi @ravi_joshi ,

I would suggest to use RenditionMaker API and Assethandler API to create our own renditions for a particular image asset. Please refer below piece of code

private void createRenditions(Asset asset) {
if (asset != null) {
for (String rendition : renditions) {
String[] renditionValues = rendition.split(":");
if (renditionValues.length == 3) {
String renditionWidthValue = renditionValues[0];
int renditionWidth = Integer.parseInt(renditionWidthValue);
String renditionHeightValue = renditionValues[1];
int renditionHeight = Integer.parseInt(renditionHeightValue);
boolean center = Boolean.parseBoolean(renditionValues[2]);
RenditionTemplate thumbnailTemplate = renditionMaker.createThumbnailTemplate(asset,
renditionWidth, renditionHeight, center);
List<Rendition> renditions = renditionMaker.generateRenditions(asset, thumbnailTemplate);
for (Rendition r : renditions) {
asset.addRendition("cq5dam.thumbnail.".concat(renditionWidthValue).concat(".")
.concat(renditionHeightValue).concat(".png"), r.getStream(), "image/png");
}
}
}
}
}

Hope that helps!

Regards,

Santosh