I believe that a picture’s aspect ratio, its width divided by its height, should be tuned to its contents. Consequently, I am not a slave to standard aspect ratios and print sizes like the ones shown in the following table.
Over the years I have clipped and cropped my pictures producing a large number of nonstandard ratios. This is not a problem until I decide to order prints.
Pictures sites like SmugMug offer many standard sizes but they cannot accommodate every crank with an aspect to grind. To print a strangely shaped picture on SmugMug you have to open up the website’s print selection tool and fit one side or your picture to a standard print size. This leaves part of the print blank and is often called the letterbox method. Letterboxing is not ideal but it gets the job done.
For standard print sizes there is a much better way. The following J verb takes the pixel dimensions of my images and computes standard, 300 DPI, print size keys like: 4×6, 5×7 and 8×10. After assigning print size keys you can select and print all standard sizes with a few mouse clicks.
smugprintsizes=:3 : 0NB.*smugprintsizes v-- compute largest print size for given dpi.NB.NB. Computes the largest print size (relative to DPI x) forNB. SmugMug images. Only images that have aspect ratios close toNB. the ratios on (SMUGPRINTSIZES) are associated with a printNB. size.NB.NB. monad: st=. smugprintsizes btclImagesNB.NB. 'albums images'=. readsmugtables 0NB. smugprintsizes imagesNB.NB. dyad: st=. iaDpi smugprintsizes btclImagesNB.NB. 200 smugprintsizes imagesSMUGPRINTDPIsmugprintsizesy:nsym=.s:<''NB. reduce image table on PIDimages=.}.y[imhead=.0{ypidpos=.imheadi.<'PID'if.0=#images=.images#~~:pidpos{"1imagesdo.02$latex nsymreturn.end.NB. compute print sizes tablepst=.printsizestableSMUGPRINTSIZESNB. image dimensions short x longidims=._1&".&>(imheadi.;:'WIDTH HEIGHT'){"1images'invalid image dimensions'assert-._1e.idimsidims=.(/:"1idims){"1idimsNB. aspect ratio and print area (square inches)ratios=.SMUGASPECTROUNDround%/"1idimsareas=.SMUGAREAROUNDround(*/"1idims)%*:xNB. mask table selecting images with ratiomasks=.(SMUGASPECTROUNDround;0{"1pst)=/ratiosif.-.1e.,masksdo.02$nsymreturn.end.masks=.<"1maskspids=.s:&.>masks#&.><pidpos{"1imagesNB. largest print area for selected images at current DPImasks=.(1{"1pst)</&.>masks#&.><areaspids=.(<"1&.>masks#"1&.>pids)-.L:0nsymsizes=.<"0&.>2{"1pst;|:&.>;pids,:L:0(#L:0pids)#L:0sizes)