我正在使用一些第三方软件将图像转换为PDF,我注意到文件大小有些膨胀。经过一番挖掘后,我确认未保留图像的颜色模型。黑白(1位)图像已转换为RGB颜色模型。
遍历库可显示一些颜色模型检测:
switch (awtColorSpace.getType()) {
case ColorSpace.TYPE_RGB:
return PDDeviceRGB.INSTANCE;
case ColorSpace.TYPE_GRAY:
return PDDeviceGray.INSTANCE;
case ColorSpace.TYPE_CMYK:
return PDDeviceCMYK.INSTANCE;
default:
throw new UnsupportedOperationException("color space not implemented: "
+ awtColorSpace.getType());
}
Run Code Online (Sandbox Code Playgroud)
这些图像总是以RGB的形式返回。我决定编写一些测试,它们似乎证实了这一点:
package com.acme;
import org.junit.Test;
import javax.imageio.ImageIO;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import static org.junit.Assert.*;
public class ImageColorDetectionTest {
@Test
public void colorImage() throws Exception {
// Colorspace: sRGB, Depth: 8-bit, Channel depth: Red: 8-bit Green: 8-bit Blue: 8-bit
BufferedImage image = readImage("/color.png");
assertEquals(ColorSpace.TYPE_RGB, image.getColorModel().getColorSpace().getType());
}
@Test
public void …
Run Code Online (Sandbox Code Playgroud) 我正在寻求解决消息传递服务器和队列的 FIFO 性质所遇到的问题。在某些情况下,我希望根据消息传递顺序以外的标准将队列中的消息分发到消费者池。理想情况下,这将防止用户占用系统中的共享资源。以这个过于简化的场景为例:
鉴于每个用户的垃圾箱中可能有大量消息,我们有哪些选项可以允许并发处理每个垃圾箱而不考虑排队时间?在我看来,有几个明显的解决方案:
在我们的例子中,创建一个单独的队列并管理每个用户的消费者确实不切实际。这是可以做到的,但我认为如果合理的话我真的更喜欢第二种选择。我们正在使用 RabbitMQ,但如果有更适合此任务的技术,则不一定与其绑定。
我正在考虑使用 Rabbit 的消息优先级来帮助随机发送的想法。通过随机为消息分配 1 到 10 之间的优先级,这应该有助于分发消息。这种方法的问题是,如果队列永远不会完全清空,那么具有最低优先级的消息可能会永远卡在队列中。我以为我可以在消息上使用 TTL,然后以升级的优先级重新排队消息,但我在文档中注意到了这一点:
应过期的消息仍然只会从队列头部过期。这意味着与普通队列不同,即使每个队列的 TTL 也可能导致过期的低优先级消息卡在未过期的高优先级消息后面。这些消息永远不会被传递,但它们会出现在队列统计信息中。
我担心我可能会因为这种方法而陷入兔子洞。我想知道其他人是如何解决这个问题的。任何有关创意路由、消息传递模式或任何替代解决方案的反馈将不胜感激。