• Recently noticed that we had a site where the wrong image was being displayed. After inspecting the element I realized the srcset was for completely different images. I then went into the admin and realized that the image being used was too small so not all of the image size crops had been created. After creating all the crops everything sorted itself out.

    Just wanted to log this as a concern, especially since this is going into core, that perhaps (and I don’t know exactly how) the method used to select the srcset could be tweaked if all of the cropped sizes don’t exist instead of matching something that seems similar in name.

    https://www.ads-software.com/plugins/ricg-responsive-images/

Viewing 9 replies - 1 through 9 (of 9 total)
  • Plugin Contributor Jasper de Groot

    (@jaspermdegroot)

    Hi donaldG2,

    Thanks for the heads-up!
    When the plugin creates the srcset it only includes images with the same aspect ratio as the original image. If there are no other sizes with the same ratio available it doesn’t add a srcset.
    At least, that is what is supposed to happen. I don’t know what went wrong in your case at what version of the plugin you were using at that time. We just released version 3.0.0 of the plugin which uses the same code as we added to core. It would be great if you could test by temporary removing the crops you added and using the same small image as before.
    Thanks!

    Thread Starter donaldG2

    (@donaldg2)

    Hey, sorry to be slow testing this out but it looks solid now! I entered a way too small image and it didn’t create a srcset, beautiful! Thanks so much Jasper!

    Plugin Contributor Jasper de Groot

    (@jaspermdegroot)

    Hi Donald,

    Thanks for testing and great to hear that everything works as expected!

    systemaddict

    (@systemaddict)

    I think I might see situations where srcset contains images that are not the same aspect ratio as the original

    So I will have this in src attribute:

    https://rabbit.sunde.tips/wp-content/uploads/2015/11/4WaystoSayNo-380×256.jpg

    And then a source set like this:

    https://rabbit.sunde.tips/wp-content/uploads/2015/11/4WaystoSayNo-320×213.jpg 320w, https://rabbit.sunde.tips/wp-content/uploads/2015/11/4WaystoSayNo-480×319.jpg 480w, https://rabbit.sunde.tips/wp-content/uploads/2015/11/4WaystoSayNo-690×459.jpg 690w, https://rabbit.sunde.tips/wp-content/uploads/2015/11/4WaystoSayNo-380×256.jpg 380w, https://rabbit.sunde.tips/wp-content/uploads/2015/11/4WaystoSayNo.jpg 849w

    My 380×256 is a hardcropped image but somehow my other custom image formats (soft cropped) also appear in srcset although they have different aspect ratio. And this actually creates some strange behavior (at least in my layout) where pixels somehow magically dissappear when Chrome picks the best image.

    I have a feeling that putting this in core WP might create some frustrations among non-coders that can really understand some of the more intricate browser decisions here. And the way I see this we will need to tweak srcset on certain pages like frontpage, galleries, etc.

    But I love the idea and speed I’m getting.

    Plugin Contributor Joe McGill

    (@joemcgill)

    Hi Systemaddict,

    What your describing could definitely be a bug. Could you paste in the full image attribute you’re seeing on your site? Also, did this happen in post content, is it a featured image, or is it a custom coded image?

    Thanks,
    Joe

    Plugin Contributor Jasper de Groot

    (@jaspermdegroot)

    This is because we accept a difference in ratio up to 0.01.

    If you run this test code you will see that the ratio difference (compared to the src image) of all image sources is less than 0.01:

    <?php
    $src = array(380,256);
    $src_ratio = $src[1] / $src[0];
    
    echo nl2br("src dimension: " . $src[0] . 'x' . $src[1] . "\n" .
    	"src ratio: " . $src_ratio . "\n\n");
    
    $sources = array(
    	array(320,213),
    	array(480,319),
    	array(690,459),
    	array(380,256),
    	array(849,565),
    );
    
    foreach ( $sources as $source ) {
    	$source_ratio = $source[1] / $source[0];
    	$ratio_diff = $src_ratio - $source_ratio;
    	$use_source = ( abs( $ratio_diff ) < 0.01 ) ? 'yes' : 'no';
    
    	echo nl2br("dimension: " . $source[0] . 'x' . $source[1] . "\n" .
    		"ratio: " . $source_ratio . "\n" .
    		"ratio diff: " . $ratio_diff . "\n" .
    		"use in srcset: " . $use_source . "\n\n");
    }

    We need to allow a small difference because rounding to whole pixels when the soft crops are created results in slightly different ratios, but maybe we can reduce it to something like 0.005?
    I wonder if it’s possible to calculate the biggest possible difference in ratio between two soft crops. Maybe someone who is very good at math has an idea?

    ===

    Output test code:

    src dimension: 380×256
    src ratio: 0.67368421052632

    dimension: 320×213
    ratio: 0.665625
    ratio diff: 0.0080592105263158
    use in srcset: yes

    dimension: 480×319
    ratio: 0.66458333333333
    ratio diff: 0.0091008771929825
    use in srcset: yes

    dimension: 690×459
    ratio: 0.66521739130435
    ratio diff: 0.0084668192219679
    use in srcset: yes

    dimension: 380×256
    ratio: 0.67368421052632
    ratio diff: 0
    use in srcset: yes

    dimension: 849×565
    ratio: 0.66548881036514
    ratio diff: 0.0081954001611804
    use in srcset: yes

    Plugin Contributor Jasper de Groot

    (@jaspermdegroot)

    Systemaddict,

    I opened a ticket for this issue on Trac: https://core.trac.www.ads-software.com/ticket/34810

    systemaddict

    (@systemaddict)

    Great. I did revert my code so you can see it live on:

    https://rabbit.sunde.tips

    Check the bottom middle story (girl with hands up). This one creates a source set with non aspect ratio images.

    If you then see the page in iPhone 6+ (using Chrome emulator) the boxes are in chaos because of the generated source set. The really strange thing is that Chrome “creates” a natural image of 380×252 (even though the original is 380×256).

    Even a 1 px difference would have caused this shuffling so I guess this could be a cause of concern.

    Here are my image definitions:

    add_image_size( ‘frontpage-default’, 380, 256, true );
    add_image_size( ‘frontpage-featured’, 790, 256, true );

    update_option( ‘medium_size_w’, 320 );
    update_option( ‘medium_size_h’, 320 );
    update_option( ‘medium_crop’, 0 );

    update_option( ‘medium_large_size_w’, 480 );
    update_option( ‘medium_large_size_h’, 480 );
    update_option( ‘medium_large_crop’, 0 );

    update_option( ‘large_size_w’, 690 );
    update_option( ‘large_size_h’, 690 );
    update_option( ‘large_crop’, 0 );

    Plugin Contributor Joe McGill

    (@joemcgill)

    Thanks again for the report systemaddict. Your issue has now been fixed in WP Core (https://core.trac.www.ads-software.com/ticket/34810) and will be fixed in the next plugin update as well.

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘When crops sizes are missing…random image selected in srcset’ is closed to new replies.