【问题标题】:How to work with CMYK colors in jQuery.colorpicker?如何在 jQuery.colorpicker 中使用 CMYK 颜色?
【发布时间】:2013-12-21 09:19:51
【问题描述】:

我想在 CMYK 中使用漂亮的 jQuery 颜色选择器 (https://github.com/vanderlee/colorpicker) 颜色。

从我使用的对话框中获取 cmyk 值

 colorFormat: ['EXACT', 'cp;mp;yp;kp'], 

结果是这样的

 0;68.157958984375;68.157958984375;20.1904296875

但是当我再次打开颜色选择器对话框时,颜色并不确定。

EXACT 模式似乎用于阅读。

您可以使用以下方法进行测试:

<!DOCTYPE html>
<html><head>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
 <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script>
 <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/ui-lightness/jquery-ui.css" rel="stylesheet" type="text/css"/>
 <script src="colorpicker/jquery.colorpicker.js"></script>
 <link type="text/css" rel="stylesheet" href="colorpicker/jquery.colorpicker.css"></link>
</head>
<body>
<input type="text" class="cp-full" value="0;83.782958984375;83.782958984375;4.736328125" style="width:350px" />
<script>
$(function() {
    $('.cp-full').colorpicker({
        parts: ['map', 'bar', 'hex', 'rgb', 'alpha', 'cmyk', 'preview' ],
        showOn: 'both',
        colorFormat: ['EXACT', 'cp;mp;yp;kp'],

        init: function(event, color) {
            console.log(color);
        },      
    });
});
</script>
</body>

那么,我该怎么做呢?

(当 init 被触发时,我查看了对象,但我认为为时已晚。也许有一个更早的事件将值从字段中拆分出来。)

【问题讨论】:

  • 你试过了吗:colorformat('c, m, y, k')
  • 我试过 colorFormat: ['EXACT', 'cp;mp;yp;kp'] 没有成功。我认为您的表达无效。它必须是 HEX 或 RGB 等预定义格式之一。否则它必须是 coler (chanel) 的一个字符和数据类型的第二个字符。
  • Colorpicker 的最新版本允许您创建解析器扩展。您应该能够通过复制提供的示例之一,使用简单的正则表达式为这种特定格式创建一个。
  • 只是为了让您知道。我修复了 Colorpicker 中的一些代码,这些代码导致一些解析器无法初始化按钮的颜色。这是固定的,我已经通过 h3nr1x 更新了 jsfiddle 以反映这一改进:jsfiddle.net/mwvdlee/B945t

标签: jquery colors color-picker cmyk


【解决方案1】:

插件的文档没有说明进行自定义读取的方法,检查代码您可以看到解析器CMYKCMYK percent 都需要格式cmyk(value, value, value, value)。但是使用以下“hack”(添加open 事件以读取输入值并更新控件颜色)您可以规避问题并在每次单击控件时显示先前选择的颜色:

<!DOCTYPE html>
<html><head>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
 <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script>
 <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/ui-lightness/jquery-ui.css" rel="stylesheet" type="text/css"/>
 <script src="colorpicker/jquery.colorpicker.js"></script>
 <link type="text/css" rel="stylesheet" href="colorpicker/jquery.colorpicker.css"></link>
</head>
<body>
<input type="hidden" id="cp-hidden-input" value=""/>
<input type="text" class="cp-full" value="0,83.782958984375,83.782958984375,4.736328125" style="width:350px" />
<script type="text/javascript">
$(function() {
    $('.cp-full').colorpicker({
        parts: ['map', 'bar', 'hex', 'rgb', 'alpha', 'cmyk', 'preview' ],
        showOn: 'both',
        colorFormat: ['EXACT', 'cp,mp,yp,kp'],
        open: function(event, color) {
            var v = $(this).val();
            // Use either ',' or ';' as separator
            var separator = v.indexOf(',') != -1 ? ',' : ';';
            var cmyk = v.split(separator);
            color.colorPicker.color.setCMYK(cmyk[0] / 100.0, cmyk[1] / 100.0, cmyk[2] / 100.0, cmyk[3] / 100.0);
        },
    });
});
</script>
</body>

【讨论】:

  • 感谢您的帮助。现在我想使用 buttonColorize: true 并隐藏输入。更改后,图像按钮的背景会更改。但未设置初始值。我尝试在 init 中为 open 执行您建议的相同操作,但这不起作用。我还尝试在 init 中使用 color.colorPicker.color.setRGB("#b81111"); 进行设置,但这也不起作用。感谢您提供更多想法。
  • 这里是完整的例子jsfiddle.net/kdLpD。加载页面时,图标是白色的,但它应该具有预先定义的颜色。如果您选择一种新颜色,则图标的颜色会发生变化。 (顺便说一句:如果输入字段的内容发生变化,则无关紧要。稍后它们都将被隐藏。)感谢您的帮助。
  • 干得好 h3nr1x!非常感谢!
  • 您似乎发现了一个错误。为这种格式编写适当的解析器非常容易(复制示例“cmyk-percentage”并更改正则表达式行:var m = /^(\d+(?:\.\d+)?)\s*[,;]\s*(\d+(?:\.\d+)?)\s*[,;]\s*(\d+(?:\.\d+)?)\s*[,;]\s*(\d+(?:\.\d+)?)/.exec(color);),但颜色最初显示不正确。
  • 我已经修复了一些错误并更新了 h3nr1x 的 jsfiddle:jsfiddle.net/mwvdlee/B945t
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多