【问题标题】:how to get similar color images from database [php]如何从数据库中获取相似的彩色图像 [php]
【发布时间】:2017-08-14 19:48:24
【问题描述】:

我正在使用brianmcdo ImagePalette 获取调色板
我想找到与一张图像 w.r.t 颜色/颜色范围相似的图像。
这是我的代码

<?php 
require_once $config->root.'/script/vendor/image-palette/vendor/autoload.php';
// initiate with image
$palette = new \BrianMcdo\ImagePalette\ImagePalette( 'http://i.imgur.com/GL7igry.png' );

// get the prominent colors
$colors = $palette->colors; // array of Color objects

//storing in databse
?>

现在我需要一个完美的 SQL 来从具有相同或匹配调色板代码的数据库中返回相似的行 [值的存储方式如:#000000,#999999,#333399] 以及一个不同的表 w.r.t 图像 id 用于快速索引?

如果这是一个重复的问题,只需给我链接,我将删除这个问题,我得到了很多反对票,我不知道在哪里问其他问题

【问题讨论】:

  • 你的数据库的结构是什么?
  • color_image 表中的 3 列 - id[auto increment] img_id[image id] color_code[#ffff]
  • 和一个主表,我将所有颜色存储在一个列中,例如 ex-#fff,#eee,#ddd
  • 使用什么关系型数据库? MySQL?微软SQL?其他?问题不清楚。
  • 我正在使用 mysql pdo

标签: php mysql database


【解决方案1】:

这是您可以为查询构建 SQL 字符串的方法。您应该使用准备好的语句,因此将其转换为您正在使用的任何库,但此代码将为您提供 sql 查询。

if($colors != null && count($colors) > 0)
{
    $sql = "SELECT * FROM color_image WHERE";

    foreach($colors as $color)
    {
        $sql .= " color_code = '". $color . "' OR ";
    }

    $sql = rtrim($sql, " OR ");
}

【讨论】:

  • 但它只会返回完全相同的代码图像。我也需要与该颜色相似的图像
  • 这是不可能的,因为我知道没有任何内置的数据库可以处理十六进制颜色。您将需要提取整个数据库并使用 php 来执行此操作。你没有在你的问题中提供足够的信息让我比我已经写的更进一步帮助你
  • 您不会通过将任意字符串组合在一起来构建查询。使用带有占位符值的准备好的语句。也不需要一串OR 子句。只需使用WHERE IN (?,?,?,...) 并根据需要重复? 部分。
  • @tadman 我在回答中明确表示这只是为了解释这个想法是如何工作的,并说 OP 应该使用准备好的语句。由于他没有具体说明他使用的是什么库,所以我不会去为他编写整个应用程序
  • 当您忽略自己的建议时,您所说的并不总是会引起注意。此外,您至少可以使用implode 来避免最后出现rtrim 混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 2015-09-13
  • 2011-05-09
  • 1970-01-01
  • 2021-02-17
相关资源
最近更新 更多