Hi,
I would suggest create a workflow process and make use of this RenditionMaker api and Assethandler Api to create our own renditions for a particular image asset.
Kindly check out this code. It would be much helpful.
@Properties({
@Property(name = "process.label", value = "Custom Image Rendition Process") })
@Component
@Service
public class CustomImageRendition implements WorkflowProcess {
private static final Logger logger = Logger.getLogger(CustomImageRendition.class.getName());
@Reference
protected ResourceResolverFactory resourceResolverFactory;
@Reference
RenditionMaker renditionMaker;
@Reference
AssetHandler assetHandler;
ResourceResolver resourceResolver;
@Override
public void execute(WorkItem workItem, WorkflowSession session, MetaDataMap args) throws WorkflowException {
try
{
String assetPath = null;
// Get the resource resolver using system user and user mapper service
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "getResourceResolver");
resourceResolver = resourceResolverFactory.getServiceResourceResolver(param);
String payloadString = workItem.getWorkflowData().getPayload().toString();
logger.info("payload path"+payloadString);
// convert the payload path into a Resource
Resource damResource = resourceResolver.resolve(payloadString);
if (damResource != null){
logger.info("the damResource is exists .. "+damResource);
// further convert the resource into Dam asset
Asset damAsset = damResource.adaptTo(Asset.class);
if(damAsset !=null)
{
logger.info("dam asset exists .. "+ damAsset);
// create a Rendition Template using Rendition Maker Api and give the width, height, quality, mimietype for your template
int width = 250;
int height = 250;
int quality = 100;
String mimeType = "image/jpeg";
String[] mimeTypesToKeep ={ "image/jpeg","image/png"};
RenditionTemplate renditionTemplate = renditionMaker.createWebRenditionTemplate(damAsset, width, height, quality,
mimeType,mimeTypesToKeep);
// Using the rendition template created above , generate the renditions
List<Rendition> renditionList = renditionMaker.generateRenditions(damAsset, renditionTemplate);
// using Asset Handler Api create thumbnails using the rendition for the asset.
Collection<ThumbnailConfig> configs = null;
for(Rendition rendition : renditionList ){
assetHandler.createThumbnails( damAsset, rendition, configs);
}
// Just to check if our rendition got added.
for (Rendition rendition2 : damAsset.getRenditions()) {
logger.info(rendition2.getName() + " " + rendition2.getPath()+"\n");
}
resourceResolver.commit();
}
}
}
catch(LoginException |IOException e){
e.printStackTrace();
}
}
}
You can create a launcher to make this workflow process to run. Hope this might help.
Thanks and regards
Abinaya