七月
14

我是如何处理文章中图片的

我从来不用WordPress的后台写文章,接触WordPress前我都用上了windows live writer,所以接触了WordPress之后我更加喜欢使用WLW了。

我知道WordPress的新版本支持缩略图,但是我不用此功能,为什么?因为缩略图是使用wp后台上传图片生成,而我使用WLW都是设置上传原图,不要缩略图,因为图片插入文章中前我都处理过,所以并不会太大。况且,大多数情况下,我是使用外链图片的,图片能放在其它托管处,我就尽量不往自己的主机上上传,一来省流量,而来搬家时也省点心。这样一来所谓的缩略图功能就无法使用了。我文章中的图片都是单张图片,并无法点击看大图,所以那些什么lightbox,hightslide效果我也用不到了。

但是偶尔也会出现图片大于文章所在div宽度,那就只好用css限制

img {
max-width:98%;
}

但是这样一来图片就会变形,因为高度并不会随之变化。如此要实现等比列缩小图片,就只有使用js了。

还有一个情况是我想要给每个图片加上个class标签,通过css来定义图片的样式,实现这样的功能一是可以通过php,在文章内容输出前,使用正则表达式替换添加相关标签属性,但是这样做会将所有的图片都加上class,也包括很小的表情图片,这是我不希望看到的。

所以为了满足我以上两个基本需求,就只有用JavaScript了。

我所用代码如下,并在css中定义了.sided的样式,就成了现如今你在我博客页面所看到的图片样式。

(function(){
    var parent = document.getElementById("content")||0;//content为日志所在div或者所需处理图片所在div的id
    if(!parent)return;
    var imgs=parent.getElementsByTagName("img");
    var max_size=parent.offsetWidth-10;//这里我觉得应该使用clientWidth,但在IE7下会取不到值,不知为何;使用offsetWidth有点不准确,但无所谓了
    for(var i=0;i<imgs.length;i++){
        if(imgs[i].offsetWidth>32){//小于32的图片比如表情就不处理了
            imgs[i].className+=" sided";//加上“sided”class属性
            imgs[i].style.border="2px solid #aaa";//因为WLW会强制以内联属性方式设置图片的边框值,所以这里需要强行修改
        }
        if(imgs[i].offsetWidth>max_size){//这里是将大于文章div宽度的图片按比列缩小并改为小图链接大图形式
            var timg=document.createElement("img");//这里新建了一个图片对象,但并未添加到页面节点树中,纯粹是为了获取原始图片的高宽比
            timg.src=imgs[i].src;
            var s=timg.height/timg.width;
            if(!s)continue;
            imgs[i].width=max_size;
            imgs[i].height=Math.round(imgs[i].width*s);
            if(imgs[i].parentNode.nodeName.toLowerCase() != 'a'){//如果这个图片没有a链接,则给其加上链接到其本身的a链接
                var imga=document.createElement("a");
                imga.href=imgs[i].src;imga.target="_blank";
                imgs[i].parentNode.appendChild(imga);
                imga.appendChild(imgs[i]);
            }
        }
    }
})();

将代码加到页面底部即可自动运行,如果你要使用,请配合自己模板修改第一行代码。

下面这张宽度超标的图片并无链接到大图,经过处理,会链接到它自身。如果看到图片高度为0,请刷新页面。

图片处理

本文标签: , , ,

分享

本文短网址: http://qiqi.boy.im/1f

这篇文章已经有 27 条评论

Comments (23) Trackbacks (4)
You can leave a response or Trackback this entry .
  1. Dianso -#1

    换新主题了啊,上面那片云有意思

    图片我还是用的WP媒体库

  2. 夏影残雪 -#2

    哇,好厉害,你预测到了“如果看到图片高度为0,请刷新页面”,这是bug还是??

    那个云不错,赞个!能换成别的东西在飘么?比如人民币,o(*////▽////*)q

    • QiQiBoY --#1

      @夏影残雪
      不算是bug,因为如果网络条件不好或者图片太大,在代码执行时图片未下载下来,那么就无法获取图片的高宽比,高宽比初始值为0,而高度=宽度x高宽比,所以高度就为0了。
      解决办法也有,比如可以让代码在页面加载完毕后再执行,这样就能避免这个问题。

      夏影残雪 :

      那个云不错,赞个!能换成别的东西在飘么?比如人民币,o(*////▽////*)q

      理论上是可以换成任何东西的,换成小雪你,也是可以飘的。。。 :grin: :grin:

  3. 阿邙 -#3

    新主题越来越完善啦 欣赏中 嘿嘿

  4. 丕子 -#4

    哦 原来是这样

  5. winy -#5

    wlw不是可以直接链接到原图,并且生成缩略图的么?为啥还要这么做呢

    • QiQiBoY --#1

      @winy
      我为了节省主机空间所以就全部去掉了链接到原图,所以没有缩略图,而且我经常讲图片传到flickr上。。。。

  6. 小邪 -#6

    汗,刚才评论木有显示,只看到“Fatal error: Call to undefined function is_old_post() in ****/wp-content/themes/SimPaled/single.php on line 68”~
    吓到一下,不过刷新下就好鸟 ~

  7. zwwooooo -#7

    还是js厉害,我不懂啊

  8. Firm -#8

    试用了下站内搜索淘金站,竟然没有,哈哈

  9. A.shun -#9

    你的站内搜索还有blogbus的记录

    我想问问这个评论引用是怎么加上去的

  10. A.shun -#10

    本地纯文本写东西,wp后台简单排版的路过

  11. 墨弦音 -#11

    其实我也想用windows live writer写的,可是自从换了主题需要发布带缩略图的文章我就用不成了,因为我需要自定义域,不知道怎么解决这个问题

  12. Bee君 -#12

    不想用缩略图生成,感觉花费空间

  13. 麦子 -#13

    这种图片处理的方式不错。我现在想找个显示缩略图的最佳方案

  1. 添加引用按钮——轻松打造属于你的WordPress引用回复功能

    [...] PS:这两天更新很频繁,因为过两天后不知道还会不会有时间更新。一连几天分别写了《完美解决WordPress嵌套回复的层深问题(无限嵌套)<一>》、《我是如何处理文章中图片的》、《 评论框的简单计数器(无需改动模板,附带输入字数限制功能)》等文章。希望到北京后还有时间继续更新博客。 声明: 本站遵循 署名-非商业性使用 3.0 共享协议. 转载请注明转自 I’m qiqiboy ! Related PostsMore Articles about: javascript, PHP, WordPress, 代码, 折腾, 评论完美解决WordPress嵌套回复的层深问题(无限嵌套)<一> (40)很久以前看到过此篇文章《JQuery为WordPress的嵌套回复添加@reply功能》,文中所讲方法也很简单,就是利用jQuery的 克隆功能(clone())将最后一层的父级评论的回复按钮给copy到最后一层…评论框的简单计数器(无需改动模板,附带输入字数限制功能) (15)来过我博客的都知道,我博客很早在评论框右下角就有个小小的计数器,可以显示你在评论框中输入的字数。这个功能很简单,配合模板,其实一两句js代码就能搞定。偶尔有人向我问…我是如何处理文章中图片的 (17)我从来不用WordPress的后台写文章,接触WordPress前我都用上了windows live writer,所以接触了WordPress之后我更加喜欢使用WLW了。 我知道WordPress的新版本支持缩略图,但是我不用此功能,为…WordPress自动获取+调用页面主循环日志中的图片 (23)这里我定义了一个get_post_excerpt_img()函数,然后定义全局变量$post,这个其实是WP内置的一个对象了。通过匹配正则表达式来匹配所需图片。这里注意,我用$post->post_excerpt是匹配摘要…博客的一点小修改 (18)主要解释一下if语句中的三个条件语句,分别是修订时间与发布时间不一致、当前时间与最后修订时间差在30天之内、修订时间与发布时间差在一个小时以上(刚发布的文章可能会频繁… [...]

  2. 【SimPaled篇】Introduce My Blog Theme For You

    [...] 图片自动按比例限制大小,自动链接大图。——注:参考《我是如何处理文章中图片的》 [...]

  3. Hello WordPress!

    [...] 2010.07 我又开始折腾了,我折腾了很多,首先是wordpress无限嵌套的完美解决WordPress嵌套回复的层深问题(无限嵌套)<一>,还有如何通过JS自动处理文中的图片宽高,这个方法我一直在用哦:我是如何处理文章中图片的。想知道我评论框的那么多功能从哪里来的么,你看完这些你也能拥有和我评论框一样强大的功能了:评论框的简单计数器(无需改动模板,附带输入字数限制功能),添加引用按钮——轻松打造属于你的WordPress引用回复功能、为评论框添加文字格式化编辑器、【多彩的评论】:让评论可以插入图片,更改文字大小、颜色、让你的评论框自由粘贴代码、修正关于Ajax comments的一个小问题。还有关于如何创建邮件表单页面的创建一个可设置cookie相关信息的内置Email联系表单;如果你也想要知道wordpress不同页面显示不同的评论数以及楼层的显示,那么这篇文章也许会给你帮助wordpress指定页面评论数+支持分页的楼层显示 [...]

  4. 【JavaScript温故知新】获取远程图片的尺寸大小

    [...] 我早在暑假初的时候写过一篇《我是如何处理文章中图片的》,其实那篇文章中的代码主要是为了限制图片的大小,因为IE对图片的按比例处理支持很不好。比如我对图片限制“max-width:600px”,火狐、chrome等浏览器会按比例缩小图片,而IE这方面较差,往往不是按比例缩小,会导致图片变形。而且IE6不支持max-width。 [...]

Leave a Reply

Hi , say something.

  • :?:
  • :razz:
  • :sad:
  • :evil:
  • :!:
  • :smile:
  • :oops:
  • :grin:
  • :eek:
  • :shock:
  • :???:
  • :cool:
  • :lol:
  • :mad:
  • :twisted:
  • :roll:
  • :wink:
  • :idea:
  • :arrow:
  • :neutral:
  • :cry:
  • :mrgreen: