.makeResizedImages(..) mostly works correctly, still missing transforms + UI...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2020-10-30 19:16:42 +03:00
parent a34591065a
commit 669ee51297

View File

@ -119,7 +119,9 @@ var SharpActions = actions.Actions({
this.previewConstructorWorker && this.previewConstructorWorker.kill() this.previewConstructorWorker && this.previewConstructorWorker.kill()
delete this.previewConstructorWorker }], delete this.previewConstructorWorker }],
// XXX should this resize up??? ...option??? // XXX Q: if skipSmaller and overwrite: 'backup' and image smaller (skiped) do we backup???
// ...I think no...
// XXX make backup name pattern configurable...
// XXX add transform/crop support... // XXX add transform/crop support...
// XXX revise logging... // XXX revise logging...
makeResizedImage: ['- Image/', makeResizedImage: ['- Image/',
@ -141,18 +143,28 @@ var SharpActions = actions.Actions({
// output image name... // output image name...
// //
// Used if processing a single image, ignored otherwise. // Used if processing a single image, ignored otherwise.
name: <str>, name: null | <str>,
// image name pattern and data... // image name pattern and data...
// //
// NOTE: for more info on pattern see: .formatImageName(..) // NOTE: for more info on pattern see: .formatImageName(..)
pattern: <str>, pattern: null | <str>,
data: { .. }, data: null | { .. },
// if true and image is smaller than size enlarge it...
//
// default: null / false
enlarge: null | true,
// overwrite, backup or skip (default) existing images... // overwrite, backup or skip (default) existing images...
// //
// default: null / false // default: null / false
overwrite: true | 'backup' | false, overwrite: null | true | 'backup',
// if true do not write an image if it's smaller than size...
//
// default: null / false
skipSmaller: null | true,
// XXX not implemented... // XXX not implemented...
transform: ..., transform: ...,
@ -162,6 +174,7 @@ var SharpActions = actions.Actions({
, } , }
NOTE: all options are optional.
NOTE: this will not overwrite existing images. NOTE: this will not overwrite existing images.
`, `,
function(images, size, path, options={}){ function(images, size, path, options={}){
@ -200,8 +213,12 @@ var SharpActions = actions.Actions({
name, name,
pattern, pattern,
data, data,
// file handling... // file handling...
enlarge,
skipSmaller,
overwrite, overwrite,
// transformations... // transformations...
// XXX not implemented... // XXX not implemented...
transform, transform,
@ -238,58 +255,81 @@ var SharpActions = actions.Actions({
logger && logger.emit('queued', to) logger && logger.emit('queued', to)
// existing image... var img = sharp(source)
if(fse.existsSync(to)){ return (skipSmaller ?
// rename... // skip source if smaller...
if(overwrite == 'backup'){ img
var i = 0 .metadata()
while(fse.existsSync(`${to}.${timestamp}'-bak`+ (i || ''))){ .then(function(m){
i++ } // skip...
fse.renameSync( if((fit == 'inside'
to, && Math.max(m.width, m.height) < size)
fse.existsSync(`${to}.${timestamp}'-bak`+ (i || ''))) || (fit == 'outside'
// remove... && Math.min(m.width, m.height) < size)){
} else if(overwrite){ logger && logger.emit('skipping', to)
fse.removeSync(to) return }
// skip... return img })
} else { : Promise.resolve(img))
logger && logger.emit('skipping', to) // write...
return } } .then(function(img){
return img
return ensureDir(pathlib.dirname(to)) && ensureDir(pathlib.dirname(to))
.then(function(){ .then(function(){
return sharp(source) // handle existing image...
.clone() if(fse.existsSync(to)){
// handle transform (.orientation / .flip) and .crop... // rename...
.run(function(){ // XXX make backup name pattern configurable...
// XXX if(overwrite == 'backup'){
if(transform || crop){ var i = 0
throw new Error('.makeResizedImage(..): ' while(fse.existsSync(`${to}.${timestamp}.bak`+ (i || ''))){
+[ i++ }
transform ? 'transform' : [], fse.renameSync(
crop ? 'crop' : [], to,
].flat().join(' and ') `${to}.${timestamp}.bak`+ (i || ''))
+' not implemented...') } // remove...
// XXX need clear spec defining what } else if(overwrite){
// order transforms are applied fse.removeSync(to)
// and in which coordinates we // skip...
// crop (i.e. pre/post transform)... } else {
if(transform){ logger && logger.emit('skipping', to)
} return } }
if(crop){
}
})
.resize({
width: size,
height: size,
fit: fit,
})
.withMetadata()
.toFile(to)
.then(function(){
logger
&& logger.emit('done', to) })}) })) }],
// write...
return img
.clone()
// handle transform (.orientation / .flip) and .crop...
.run(function(){
// XXX
if(transform || crop){
throw new Error('.makeResizedImage(..): '
+[
transform ? 'transform' : [],
crop ? 'crop' : [],
].flat().join(' and ')
+' not implemented...') }
// XXX need clear spec defining what
// order transforms are applied
// and in which coordinates we
// crop (i.e. pre/post transform)...
if(transform){
// XXX
}
if(crop){
// XXX
}
})
.resize({
width: size,
height: size,
fit: fit,
withoutEnlargement: !enlarge,
})
.withMetadata()
.toFile(to)
.then(function(){
logger
&& logger.emit('done', to) }) }) }) })) }],
// XXX use .makeResizedImage(..) // XXX use .makeResizedImage(..)
// XXX should this account for non-jpeg images??? // XXX should this account for non-jpeg images???
// XXX BUG?: this breaks on PNG images... // XXX BUG?: this breaks on PNG images...