php笔记之:文章中图片处理的使用

array_diff($arr1,$arr2)
php数组函数之一,用来计算数组的差集.
正则匹配html图片标签
用sinaeditor添加的图片删除操作
用法之一,今天晚上在用新浪编辑器发表文章的过程中.
使用到了此函数

问题描述:

文章中有图片若干.在增加文章的过程中自动上传到网站的图片目录中
在修改文章的过程中如果对图片进行相关的删除操作.那么虽然在代码中(已经存入数据库);
已经删除了数据的标签.类似于<img src=http://......>这样的标签.但是图片的文件依旧存在于
网站上.这时候需要一定的处理

处理办法:

首先:从数据库中得到原始的文章内容
从里面得到图片的文件名
用到了正则

方法如下

复制代码代码如下:

public function getimgsinarticle($content)
 {
  $temp = array();
  $imgs = array();
  preg_match_all(‘/http[^\d]*[\d]+[\.](jpg|gif|png)/‘,$content,$temp);
  $temp = $temp[0];
  if(!empty($temp[0]))
  {
   for($i=0;$i<count($temp);$i++)
   {
    $imgs[$i] = pathinfo($temp[$i]);
    $imgs[$i] = $imgs[$i][‘basename‘];
   }
   return $imgs;
  }
  else
  {
   return false;
  }
 }

对正则进行下解释,先匹配http四个字母然后匹配非数字的字符若干个.匹配数字字符至
少一个,匹配点(.)一个,匹配以jpg或gif或png结尾从$congtent中查找.结果存入$temp中.
将数据库中的原始数据中的图片保存在数组中.命名为$oldimgs
这个地方我觉得应该改进下,存入后打印出来是二维数组.用起来有点费事
注:我的图片名称是类似于这个样子命名的:"201111291322589013.jpg"

第二步:
从用户提交过来的内容中找到所有的图片方法如上.得到数组二命名为$newimgs
对arr1和arr2求差集方法如下
--也就是说如果原始数据中的图片不存在于用户新提交的内容中.那么将删除这个图片.

复制代码代码如下:

$oldimgs = $this->getimgsinarticle($oldarticledata[‘article_content‘]);
   $newimgs = $this->getimgsinarticle($data[‘articlecontent‘]);
   //print_r($newimgs);
   $newimgs = empty($newimgs)?array():$newimgs;
   if($oldimgs!=false)
   {
    $diff = array_diff($oldimgs,$newimgs);
    $diff = array_values($diff);
    if(!empty($diff))
    {
     for($i=0;$i<count($diff);$i++)
     {
      $this->delimg($diff[$i],ARTICLE_IMG_DIR);
     }
    }
   }

删除图片的方法如下 很简单.

复制代码代码如下:

public function delimg($imgname,$dir)
 {
  @unlink($dir.‘/‘.$imgname);
  return true;
 }

这样我的目的就达到了.当用户编辑了带有图片的文章.如果删除了图片.那么相应的图片也会从网站上删除
得到文章中的图片名称的方法还可以应用到删除文章的过程中.

在删除图片的方法中的$dir可以用realpath(__FILE__)加上各种"./""../"去给出图片目录相对于网站的目录
对于得到html中的路径这里的正则写的不是很好.有待研究.最近发现一本正则的书.很不错
精通正则表达式第三版  Jeffrey E.F. Friedl著 ,余晟(cheng)译

时间: 2024-10-14 08:41:03

php笔记之:文章中图片处理的使用的相关文章

ASP.NET/C#获取文章中图片的地址

前几天修改一个网站的布局的时候需要把简单的新闻列表修改为图文结合+新闻列表,不过这新闻的数据库非常简单,图片是在编辑器里面和HTML一起存入数据库中的content字段的,所以工作简化到从一个字符串里面获取图片的地址并输出.在HTML的图片标签一般如下格式所示:<img src="" alt="" title="" width="" height="" />,这就相当于编程中的一个结构体啊,里面

BBS-添加文章及文章中图片

目录 BBS项目中的添加文章 BBS项目中的添加文章中的图片 BBS项目中的添加文章 1.添加文章的时候,我们需要特别注意的是这个地方需要利用到到BeautifulSoup这个模块,因为我们在input的框中输入的内容,到了后端我们需要通过BeautifulSoup模块进行转成后端可以使用的文档 from bs4 import BeautifulSoup # 添加文章 def add_article(request): tag_list = models.Tag.objects.filter(b

获取文章中图片路径的正则表达式

String content = "<p><img src="http://xxx.com/image/635.png" alt="bg" style="max-width:100%;"><img src="http://ssss.com/image/d17c.jpg" alt="spe-03" style="max-width: 100%;"&g

微信公众号文章中图片加载时,占位图宽高大小的确定

打开一篇多图的微信公众好文章.在图片加载过程中,我们发现微信对每一个img都塞了也个占位图,而且占位图的宽高就是实际加载完图的宽高.这是如何做到的呢? 1.微信所有的img标签里,都有自定义的data-ratio,data-w.这两个属性是关键. //data-w:是图片的natural width. //data-ratio:是图片的高/宽值. <img data-src="http://mmsns.qpic.cn/mmsns/yvia9lE3NdzrSMQ18VrVqjEUU5BeMx

Android:漫画APP开发笔记之ListView中图片按屏幕宽度缩放

一.listview <ListView android:id="@+id/piclist" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@+id/bottom" android:layout_marginTop="106dp" android:divider

Word中图片自动编号且与文中引用的编号对应

当我们在进行大篇幅 word 文档的编写时, 为了节约修改文章中图片所花费的大量时间, 可以将图片自动编号,且让文中引用的顺序跟着图片顺序的变化而变化,具体操作如下: 1. 将鼠标定在欲加编号的下方,点击"引用 "→"插入题注" 2. 点击"标签"右侧的倒三角,看有没有自己想要的格式,若没有,则点击"新 建标签",输入自己想要的格式,然后点击确定,则"标签"项中加入自己想要 的格式       3. 点击确

解决WordPress在文章中插入图片时默认插入中等格式图片的问题

如题所示,我使用的是WordPress自带的编辑器进行编辑,而且为了保护版权开始给自己的图片添加文字水印.本来每次上传的时候都可以通过插件自动地给图片添加上水印,但是比较恶心的是把图片插入到文章中之后自动生成了一个中等尺寸的图片,而这个新的小图片是没有水印的.解决这个问题也很简单,只需要在后台的"设置" –> "多媒体"里进行简单的设置就可以了 如上图所示,只需要把媒体选项里的所有选项都设置成0就可以了

dedecms获取文章中的图片代码

1.在 /include/common.func.php 文件底部加入以下代码 /** * getArcImages 获取文章中的图片 * $id 文章ID * $num 要获取的图片数量 默认为4张 */ function getArcImages($id,$num=4){ global $dsql; $row = $dsql->GetOne("SELECT * FROM dede_addonarticle WHERE aid= $id"); $content = $row['

如何获取别人微信文章中的图片

有时我们看到别人微信文章中的图片很好看,想保存下来,又或者是我们本身是微信运营者,想"借用"一下别人的图,简单点的做法是在手机微信文章中点击图片,会出现微信图片浏览器,然后点击右上角的三个点点,点击保存到手机.如果电脑要用,就用手机发送给电脑就行,如下图: 但是,如果仅仅这么简单我就不用写这篇文章了!! 关键在于,这样得到的图是经过微信处理过的小图,放大后会失真,那怎么获得大图呢? 试过的人可能知道,将微信文章链接发送到电脑端,然后在电脑浏览器打开文章,右键另存,下载下来的是一个名为&