查找最大的图像

Posted

技术标签:

【中文标题】查找最大的图像【英文标题】:Find largest image 【发布时间】:2012-03-20 15:22:07 【问题描述】:

我正在使用以下内容在.content 中查找图像并将其宽度应用于.project 父宽度。

    $('.content').find('img').each(function () 
         var $this = $(this), width = $this.width();
         
            $(this).closest('.project').css("width", width);
        
    );

我的问题是它在.content 中找不到最大 图像,并且有时应用的宽度小于最大图像,这给我的布局造成了问题。

任何帮助都会很棒。谢谢。


编辑

糟糕,detail 错了,答案很棒!我只需要应用父project div 的最大宽度。

以 Sudhir 的回答为基础。

这不起作用,它应该起作用吗?

 $(document).ready(function() 
var max_width = 0;
$('.content').find('img').each(function()
        var this_width = $(this).width();
        if (this_width > max_width) max_width = this_width;
);
$(this).closest('.project').css('width', max_width + 'px');
);

布局示例。有很多项目。

<div class="container">

    <div class="project">
        <div class="content">
            <img src="small.jpg"    />
            <img src="large.jpg"    />
            <img src="medium.jpg"    />

        </div>

        <div class="meta">Other content here.

        </div>
    </div>



    <div class="project">
        <div class="content">
            <img src="small.jpg"    />
            <img src="large.jpg"    />

       </div>

        <div class="meta">Other content here.

        </div>
    </div>

【问题讨论】:

我无法想象您网站上 Div 的布局。你有很多 .content div,每个都有自己的 .project div?还是有一个 .content div,里面有 .project div,每个里面都有图片?您能否发布一个 html 布局的示例。 是的,每个 .content div 也有它自己的父 .project div。 @Tim 我希望这是有道理的,很多 .projects 在一个更大的容器中。 【参考方案1】:

您不能在文档就绪事件中执行此操作。您必须在加载窗口时执行此操作,因为必须加载所有图像才能获得尺寸。

$(window).load(function()
    $('.project').each(function()
        var maxWidth = 0;
        $(this).find('.content img').each(function()
            var w = $(this).width();
            if (w > maxWidth)  
              maxWidth = w;
            
        );
        if (maxWidth) 
          $(this).css(width:maxWidth);
        
    );       
);

【讨论】:

太棒了@kitgui.com。我唯一的问题是,如果没有找到图像,它默认为 0px。这再次打破了布局。但是我是否应该编写一个额外的脚本来查找没有图像的项目。 对,我的意思是向您展示主要问题是窗口加载,而不是其他问题。您可以根据需要进行修复。这是出于演示目的。如果你只是为了嘘声和咯咯笑,我会给你一个布尔值 非常感谢,不知道有没有办法避免窗口加载问题? 是的,您可以为每个图像单独放置一个加载事件,并使用 data 属性为其提供“.project”和“maxWidth”的上下文。如果图像被缓存并且不像 Chrome 有时那样触发,这会变得有点棘手。不那么令人头疼的方法是依赖窗口加载,但它看起来可能更慢。您还可以将 div 包裹在图像周围并使用溢出隐藏并为其提供预期的平均尺寸。然后你可以调整负载。至少用户不会注意到那么多。 @kitgui.com 如果我没记错的话,您不能在旧版 MSIE 中的图像上设置“加载”事件【参考方案2】:

这行得通,但我不知道你是否希望它超级压缩:

function findmax()  
    max=Math.max(max,parseInt($(this).css('width'))); 
function sum() 
    max=0;
    $(this).children('img').each(findmax);
    $(this).parent().css('width',max+'px'); 
var max;
$('.content').each(sum);

【讨论】:

【参考方案3】:

您正在循环浏览所有图像,因此容器的宽度将始终与上一张图像相同。您应该检查当前图像的宽度,并将其与在该点找到的最宽图像的宽度进行比较,并相应地调整宽度。

编辑

试试这个:

$('.content').each(function () 
    var max_width = 0;
    $(this).find('img').each(function () 
        if ($(this).width() > max_width) 
            max_width = $(this).width();
        
    );

    $(this).width(max_width);

);

对嵌套的 $(this) 感到很疯狂,但我认为它应该可以工作。

【讨论】:

【参考方案4】:

jQuery plugin authoring guide 中的示例与您要查找的内容非常相似:

$.fn.maxWidth = function() 
  var max = 0;

  this.each(function() 
    max = Math.max(max, $(this).width());
  );

  return max;
;

像这样使用它:

var maxWidth = $('.content img').maxWidth();

【讨论】:

【参考方案5】:

你的意思是这样的:

var max_width = 0; $('.content').find('img').each(function() var this_width = $(this).width(); if (this_width > max_width) max_width = this_width; ); $('.project').css('width', max_width + 'px');

希望对你有帮助

【讨论】:

这很好用,除了它对每个.project 应用相同的宽度。而不是在项目中找到最大的图像并将最大的图像应用于该项目。就像.closest 以前的工作方式一样。【参考方案6】:

要获得最大宽度,只需使用此函数进行迭代:

var getMaxWidth = function ($elms) 
    var maxWidth = 0;
    $elms.each(function () 
        var width = $(this).width();
        if (width > maxWidth) 
            maxWidth = width;
        
    );
    return maxWidth;
;

【讨论】:

您忘记初始化width 变量。 :-)

以上是关于查找最大的图像的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow - 为图像张量中的每个像素查找最大3个相邻像素

根据OpenCV中一个通道中的值查找最大颜色像素

图像分割基于最大类间方差阈值与遗传算法的道路分割

图像分割基于最大类间方差阈值与遗传算法的道路分割

图像分割基于最大类间方差阈值与遗传算法的道路分割

在图像上查找主色