【问题标题】:Search and replace image dimension within content in mysql?在mysql的内容中搜索和替换图像尺寸?
【发布时间】:2012-12-04 20:44:01
【问题描述】:

我有一个包含 500 多个帖子的 wordpress 博客。第一个帖子图片总是 550px 宽,高在 300px 和 450px 之间。

博客设计已更新,第一个帖子图片现在为 600 像素宽,高介于 350 像素和 500 像素之间。我已经手动下载了第一张图片,并将它们的大小从 550 调整为 600,但有一些轻微的质量损失。

最简单的方法是在数据库中搜索和替换。寻找width="550",换成width="600",但是高度有问题。这不是一个固定的变量,比如 550。

如果 wordpress 图片有自己的表格,我可以简单地做类似的事情

update  wp_posts
set height = height*1.09;

但在 wordpress 的情况下,这是无法做到的,因为信息存储在 post_content 中,看起来像这样:

<img class="alignnone size-full wp-image-4352" title="Image Title" src="http://www.website.com/wp-content/uploads/2012/12/image.jpg" alt="image" width="550" height="351" />

在mysql中如何根据宽度比例改变高度?

【问题讨论】:

    标签: mysql image wordpress replace


    【解决方案1】:

    这是一个非常棘手的问题。但这也是一个有趣的问题。

    不管怎样,就这样吧。要从 post_content 图像中提取宽度和高度,请创建一个视图

    create view temp_images (id, width, height) as
    select id,
           ExtractValue(post_content, '/img/@width'),
           ExtractValue(post_content, '/img/@height')
    from wp_posts
    where post_content like '<img%'
          and ExtractValue(post_content, '/img/@width') = 550;
    

    您的机箱不需要宽度,但如果您想玩,它就在这里。 现在,您有了图片帖子的 id 以及相应的宽度和高度。这样,您可以分两步更新图像元素的宽度和高度

    update wp_posts, temp_images
    set post_content = UpdateXml(post_content, '/img/@width', 'width="600"')
    where wp_posts.id = temp_images.id;
    
    update wp_posts, temp_images
    set post_content = UpdateXml(post_content, '/img/@height',
                                 concat('height="', round(height * 1.09), '"'))
    where wp_posts.id = temp_images.id;
    

    最后当然是清理

    drop view temp_images;
    

    最后但同样重要的是,这里有一个SQL Fiddle 用于测试和播放。

    【讨论】:

    • 谢谢。暂时“停放”数据的好主意。需要明确的是,这段代码似乎会将所有图像的高度更改 * 1.09,而不仅仅是 550 宽的图像?例如,图库中可能有 800x600 的图片,或者帖子中的图片小于 550 像素。
    • @Lisa 好的,那我错过了。那么,您只想更改宽度正好为 550 像素的图像吗?还是有其他属性?
    • @Lisa 我更新了答案,如果它只是 550 像素宽的图像。
    • 感谢您的更新。这似乎给出了一个语法错误 SQL-query: UPDATE wp_posts, temp_images SET post_content = UpdateXml( post_content, '/img/@width', 'width="600"' ) ) WHERE wp_posts.id = temp_images.id; MySQL retourneerde: #1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 ') where wp_posts.id = temp_images.id' 附近使用正确的语法
    • 我尝试了 3 个步骤并且成功了。谢谢你。还有一个问题。它有一种方法可以四舍五入。 381像素变成了416.328987
    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多