Necesito generar 1000 imágenes cada una con números diferentes. Al hacer esto, se encuentra un script en línea que funciona bien, pero no funciona con 00 delante de los incrementos.
No puedo simplemente agregar 00 delante de cada número porque cuando llega a 10 está haciendo 0010 en lugar de 010 como yo quiero.
Eso significa que necesito cambiar un poco el código. Y probablemente sea MUY básico, pero simplemente no puedo entenderlo. Lamentablemente, no hay registro porque estoy ejecutando el script en Photoshop.
Aquí está el código con el que tengo problemas. Y debajo está el resultado:
for (var i=1; i <= numImages; i++) { if(layer.textItem.contents < 10) { layer.textItem.contents = "00" + i.toString(); } else if(layer.textItem.contents >= 10) { layer.textItem.contents = "0" + i.toString(); } else { layer.textItem.contents = i.toString(); } SavePNG(directory + imageName + '_'+ i +'.png'); };¡Cualquier ayuda es muy apreciada! ¡No necesito que me alimenten con una cuchara! ¡Necesito aprender de mis errores!
Aquí está el código completo en el script (Olvidé agregar esto, editado después)
var imageName = 'Oppmoteskjema'; var numImages = 15; function SavePNG(saveFile){ var pngOpts = new ExportOptionsSaveForWeb; pngOpts.format = SaveDocumentType.PNG pngOpts.PNG8 = false; pngOpts.transparency = false; pngOpts.interlaced = false; pngOpts.quality = 10; activeDocument.exportDocument(new File(saveFile),ExportType.SAVEFORWEB,pngOpts); } var layer = activeDocument.layers[0]; if (layer.kind == 'LayerKind.TEXT') { for (var i=1; i <= numImages; i++) { layer.textItem.contents = i.toString(); var str = "" + i; var pad = "000"; var ans = pad.substring(0, pad.length - str.length) + str; SavePNG(directory + imageName + '_'+ ans +'.png'); } };```Podrías intentarlo de esta manera:
for (var i=1; i <= numImages; i++) { var str = "" + i; var pad = "000"; var ans = pad.substring(0, pad.length - str.length) + str; layer.textItem.contents = ans; SavePNG(directory + imageName + '_'+ ans +'.png'); };Puede cambiar la plantilla de la almohadilla como desee. La salida de esto será:
1 -> 001
97 -> 097
999 -> 999
1234 -> 1234
Si solo está tratando de manipular una variable basada en el índice del bucle, lo siguiente sería suficiente.
for (var i = 1; i <= 1000; i++) { // Result will be '00' | '0' | '' const result = i < 10 ? '00' : i < 100 ? '0' : ''; // The result is prepended to the current index // Aka (001, 010, 100) const contents = result + i; // Set the text item object contents to value of contents layer.textItem.contents = contents; // Saves the Image SavePNG(directory + imageName + '_' + contents + '.png'); }Este
i < 10 ? '00' : i < 100 ? '0' : ''
Es un operador ternario por cierto, es esencialmente una declaración if abreviada.
Puede agregar el número a una cadena de ceros y luego dividir la cadena resultante en función de la longitud deseada:
var template = "0000"; var num = 0; var targetNumber = 1000; for(let i = 0; i <= targetNumber; i++) { // add i to the template. Javascript will automatically to this type-coerceon since we're adding string + number let numStr = template + i; // strip leading zeroes to match the template length numStr = numStr.slice(numStr.length - template.length); console.log(numStr); }