hdesigns Posted January 26, 2015 Share Posted January 26, 2015 I'm in a situation where I need to output an array of images in the exact same size. So far, so good. With $image->size(900, 600); I can do this. The problem is: If I do the exact same thing with a portrait image. It crops the top and the bottom. I need to avoid this. Is there any option to resize a portrait image into the landscape format and fill out the resulting blank space (on the left and right side) with a color providing the rgb- or hex-code? I've attached an example image of what I want to achieve. Link to comment Share on other sites More sharing options...
LostKobrakai Posted January 26, 2015 Share Posted January 26, 2015 How about saving the user the wasted pixels and using this: .wrapper { position: relative; background-color: #BADA55; padding-bottom: 56.25%; /* 16:9 (Adjust to your ratio)*/ height: 0; } .wrapper .inner { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } <div class="wrapper"> <div class="inner"> <img src="…"> </div> </div> Link to comment Share on other sites More sharing options...
hdesigns Posted January 26, 2015 Author Share Posted January 26, 2015 In my particular case this doesn't work because I want to create a slider that is also responsive. Next to the normal width of the slider I set the max-width to 100% to make sure the user can see the full image if the browser window with is smaller than the slider normally would be. Now, if I have a portrait image in an array of landscape images the portrait image appears much higher than the other images because of the max-width 100%. This of course ruins the design... I can't come up with a css-solution. There may be a js-solution but I'm not sure if I'm comfortable with it. As far as I can see the php/pw solution would be not that bad. I admit there are some wasted pixels and this results in slower loading. If someone comes up with a better working solution I'm willing to adapt. Link to comment Share on other sites More sharing options...
LostKobrakai Posted January 26, 2015 Share Posted January 26, 2015 Maybe this fits your needs. Appeared just today on my twitter timeline. http://nicolasgallagher.com/flexible-css-cover-images/ Link to comment Share on other sites More sharing options...
interrobang Posted January 26, 2015 Share Posted January 26, 2015 I think you can do this with the PIM module https://processwire.com/talk/topic/4264-release-page-image-manipulator/ The method you are looking for is canvas() Having said that, I would probably do it with css if it is ok for you using a css background-image instead of a normal <img/>. You can position and scale background-images easily with css like this: <style> .slide { background-position: 50% 50%; background-size: contain; background-repeat: no-repeat; } </style> <div class="slides"> <div class="slide" style="background-image: url(img.jpg)">Content Slide 1</div> <div class="slide" style="background-image: url(img.jpg)">Content Slide 2</div> </div> 2 Link to comment Share on other sites More sharing options...
hdesigns Posted January 26, 2015 Author Share Posted January 26, 2015 Thank you guys. @interrobang: Your idea with the background image did the trick perfectly. Thanks so much! I really don't know why I didn't came up with this. Now that I see it, it seems so obvious... Link to comment Share on other sites More sharing options...
interrobang Posted January 26, 2015 Share Posted January 26, 2015 I did not include any vendor prefixes. If you need to support old browser version you might want to add -moz and -webkit prefixes to background-size. And for IE8 you need a htc-polyfill https://github.com/louisremi/background-size-polyfill And in the future you can use img { object-fit: contain; } But unfortunately this is not ready for primetime: http://caniuse.com/#feat=object-fit Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now