- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
到目前为止似乎没有任何效果。我看到了 pnginfo以下消息:
concept_Sjet_dream6.png...
Image Width: 200 Image Length: 240
Bitdepth (Bits/Sample): 8
Channels (Samples/Pixel): 2
Pixel depth (Pixel Depth): 16
Colour Type (Photometric Interpretation): GRAYSCALE with alpha channel
Image filter: Single row per byte filter
Interlacing: No interlacing
Compression Scheme: Deflate method 8, 32k window
Resolution: 11811, 11811 (pixels per meter)
FillOrder: msb-to-lsb
Byte Order: Network (Big Endian)
Number of text strings: 1 of 9
Comment (xTXt deflate compressed): The comment
但是剩下的文本字符串丢失了。我也尝试了 stackoverflow 中的其他解决方案,他们也没有工作。 pngchunks 提供此信息:
Chunk: Data Length 13 (max 2147483647), Type 1380206665 [IHDR]
Critical, public, PNG 1.2 compliant, unsafe to copy
IHDR Width: 200
IHDR Height: 240
IHDR Bitdepth: 8
IHDR Colortype: 4
IHDR Compression: 0
IHDR Filter: 0
IHDR Interlace: 0
IHDR Compression algorithm is Deflate
IHDR Filter method is type zero (None, Sub, Up, Average, Paeth)
IHDR Interlacing is disabled
Chunk CRC: -277290027
Chunk: Data Length 1 (max 2147483647), Type 1111970419 [sRGB]
Ancillary, public, PNG 1.2 compliant, unsafe to copy
... Unknown chunk type
Chunk CRC: -1362223895
Chunk: Data Length 2 (max 2147483647), Type 1145523042 [bKGD]
Ancillary, public, PNG 1.2 compliant, unsafe to copy
... Unknown chunk type
Chunk CRC: -2020619073
Chunk: Data Length 9 (max 2147483647), Type 1935231088 [pHYs]
Ancillary, public, PNG 1.2 compliant, safe to copy
... Unknown chunk type
Chunk CRC: 2024095606
Chunk: Data Length 7 (max 2147483647), Type 1162692980 [tIME]
Ancillary, public, PNG 1.2 compliant, unsafe to copy
... Unknown chunk type
Chunk CRC: 292503155
Chunk: Data Length 19 (max 2147483647), Type 1951942004 [tEXt]
Ancillary, public, PNG 1.2 compliant, safe to copy
... Unknown chunk type
Chunk CRC: -528748773
Chunk: Data Length 8192 (max 2147483647), Type 1413563465 [IDAT]
Critical, public, PNG 1.2 compliant, unsafe to copy
IDAT contains image data
Chunk CRC: -309524018
Chunk: Data Length 8192 (max 2147483647), Type 1413563465 [IDAT]
Critical, public, PNG 1.2 compliant, unsafe to copy
IDAT contains image data
Chunk CRC: -1646200198
Chunk: Data Length 2301 (max 2147483647), Type 1413563465 [IDAT]
Critical, public, PNG 1.2 compliant, unsafe to copy
IDAT contains image data
Chunk CRC: -810299134
Chunk: Data Length 0 (max 2147483647), Type 1145980233 [IEND]
Critical, public, PNG 1.2 compliant, unsafe to copy
IEND contains no data
Chunk CRC: -1371381630
示例图片:
我很困惑。谢谢大家。
PD:显然每张图片都会出现这种情况,这不是特例而是常见情况。
最佳答案
这是一种从“有效”png 文件中提取文本信息的简单 Java 方法。国际字符可能无法在主机上正常显示。
import java.io.*;
import java.util.zip.InflaterInputStream;
public class PNGExtractText
{
/** PNG signature constant */
public static final long SIGNATURE = 0x89504E470D0A1A0AL;
/** PNG Chunk type constants, 4 Critical chunks */
/** Image header */
private static final int IHDR = 0x49484452; // "IHDR"
/** Image trailer */
private static final int IEND = 0x49454E44; // "IEND"
/** Palette */
/** Textual data */
private static final int tEXt = 0x74455874; // "tEXt"
/** Compressed textual data */
private static final int zTXt = 0x7A545874; // "zTXt"
/** International textual data */
private static final int iTXt = 0x69545874; // "iTXt"
/** Background color */
public static void showText(InputStream is) throws Exception
{
//Local variables for reading chunks
int data_len = 0;
int chunk_type = 0;
byte[] buf=null;
long signature = readLong(is);
if (signature != SIGNATURE)
{
System.out.println("--- NOT A PNG IMAGE ---");
return;
}
/** Read header */
/** We are expecting IHDR */
if ((readInt(is)!=13)||(readInt(is) != IHDR))
{
System.out.println("--- NOT A PNG IMAGE ---");
return;
}
buf = new byte[13+4];//13 plus 4 bytes CRC
is.read(buf,0,17);
while (true)
{
data_len = readInt(is);
chunk_type = readInt(is);
//System.out.println("chunk type: 0x"+Integer.toHexString(chunk_type));
if (chunk_type == IEND)
{
System.out.println("IEND found");
int crc = readInt(is);
break;
}
switch (chunk_type)
{
case zTXt:
{
System.out.println("zTXt chunk:");
buf = new byte[data_len];
is.read(buf);
int keyword_len = 0;
while(buf[keyword_len]!=0) keyword_len++;
System.out.print(new String(buf,0,keyword_len,"UTF-8")+": ");
InflaterInputStream ii = new InflaterInputStream(new ByteArrayInputStream(buf,keyword_len+2, data_len-keyword_len-2));
InputStreamReader ir = new InputStreamReader(ii,"UTF-8");
BufferedReader br = new BufferedReader(ir);
String read = null;
while((read=br.readLine()) != null) {
System.out.println(read);
}
System.out.println("**********************");
is.skip(4);
break;
}
case tEXt:
{
System.out.println("tEXt chunk:");
buf = new byte[data_len];
is.read(buf);
int keyword_len = 0;
while(buf[keyword_len]!=0) keyword_len++;
System.out.print(new String(buf,0,keyword_len,"UTF-8")+": ");
System.out.println(new String(buf,keyword_len+1,data_len-keyword_len-1,"UTF-8"));
System.out.println("**********************");
is.skip(4);
break;
}
case iTXt:
{
// System.setOut(new PrintStream(new File("TextChunk.txt"),"UTF-8"));
/**
* Keyword: 1-79 bytes (character string)
* Null separator: 1 byte
* Compression flag: 1 byte
* Compression method: 1 byte
* Language tag: 0 or more bytes (character string)
* Null separator: 1 byte
* Translated keyword: 0 or more bytes
* Null separator: 1 byte
* Text: 0 or more bytes
*/
System.out.println("iTXt chunk:");
buf = new byte[data_len];
is.read(buf);
int keyword_len = 0;
int trans_keyword_len = 0;
int lang_flg_len = 0;
boolean compr = false;
while(buf[keyword_len]!=0) keyword_len++;
System.out.print(new String(buf,0,keyword_len,"UTF-8"));
if(buf[++keyword_len]==1) compr = true;
keyword_len++;//Skip the compresssion method byte.
while(buf[++keyword_len]!=0) lang_flg_len++;
//////////////////////
System.out.print("(");
if(lang_flg_len>0)
System.out.print(new String(buf,keyword_len-lang_flg_len, lang_flg_len, "UTF-8"));
while(buf[++keyword_len]!=0) trans_keyword_len++;
if(trans_keyword_len>0)
System.out.print(" "+new String(buf,keyword_len-trans_keyword_len, trans_keyword_len, "UTF-8"));
System.out.print("): ");
/////////////////////// End of key.
if(compr) //Compressed text
{
InflaterInputStream ii = new InflaterInputStream(new ByteArrayInputStream(buf,keyword_len+1, data_len-keyword_len-1));
InputStreamReader ir = new InputStreamReader(ii,"UTF-8");
BufferedReader br = new BufferedReader(ir);
String read = null;
while((read=br.readLine()) != null) {
System.out.println(read);
}
}
else //Uncompressed text
{
System.out.println(new String(buf,keyword_len+1,data_len-keyword_len-1,"UTF-8"));
}
System.out.println("**********************");
is.skip(4);
break;
}
default:
{
buf = new byte[data_len+4];
is.read(buf,0, data_len+4);
break;
}
}
}
is.close();
}
private static int readInt(InputStream is) throws Exception
{
byte[] buf = new byte[4];
is.read(buf,0,4);
return (((buf[0]&0xff)<<24)|((buf[1]&0xff)<<16)|
((buf[2]&0xff)<<8)|(buf[3]&0xff));
}
private static long readLong(InputStream is) throws Exception
{
byte[] buf = new byte[8];
is.read(buf,0,8);
return (((buf[0]&0xffL)<<56)|((buf[1]&0xffL)<<48)|
((buf[2]&0xffL)<<40)|((buf[3]&0xffL)<<32)|((buf[4]&0xffL)<<24)|
((buf[5]&0xffL)<<16)|((buf[6]&0xffL)<<8)|(buf[7]&0xffL));
}
public static void main(String args[]) throws Exception
{
FileInputStream fs = new FileInputStream(args[0]);
showText(fs);
}
}
注意::用法:java PNGExtractText image.png
这是我从官方 png 测试套件的测试图像 ctzn0g04.png 中得到的:
D:\tmp>java PNGExtractText ctzn0g04.png
tEXt chunk:
Title: PngSuite
**********************
tEXt chunk:
Author: Willem A.J. van Schaik
(willem@schaik.com)
**********************
zTXt chunk:
Copyright: Copyright Willem van Schaik, Singapore 1995-96
**********************
zTXt chunk:
Description: A compilation of a set of images created to test the
various color-types of the PNG format. Included are
black&white, color, paletted, with alpha channel, with
transparency formats. All bit-depths allowed according
to the spec are present.
**********************
zTXt chunk:
Software: Created on a NeXTstation color using "pnmtopng".
**********************
zTXt chunk:
Disclaimer: Freeware.
**********************
IEND found
编辑:刚刚找到您的链接并尝试使用图像,得到了这个:
D:\tmp>java PNGExtractText concept_Sjet_dream6.png
tEXt chunk:
Comment: The comment
**********************
IEND found
上面的例子已经成为 Java 图像库的一部分,可以在 https://github.com/dragon66/icafe 找到。
关于png - 从 png 文件中获取文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10454733/
在有些场景下,我们需要对我们的varchar类型的字段做修改,而修改的结果为两个字段的拼接或者一个字段+字符串的拼接。 如下所示,我们希望将xx_role表中的name修改为name+id。
SELECT incMonth as Month, SUM( IF(item_type IN('typ1', 'typ2') AND incMonth = Month, 1, 0 ) )AS
我最近读到 volatile 字段是线程安全的,因为 When we use volatile keyword with a variable, all the threads read its va
我在一些模型中添加了一个 UUID 字段,然后使用 South 进行了迁移。我创建的任何新对象都正确填充了 UUID 字段。但是,我所有旧数据的 UUID 字段为空。 有没有办法为现有数据填充 UUI
刚刚将我的网站从 mysql_ 更新为 mysqli,并破坏了之前正常运行的查询。 我试图从旋转中提取 id,因为它每次都会增加 1,但我不断获取玩家 id,有人可以告诉我我做错了什么吗?我尝试了将
我在 Mac OS X 上使用带有 Sequel Pro 的 MySQL。我想将一个表中的一个字段(即名为“GAME_DY”的列)复制到另一个名为“DAY_ID”的表的空字段中。两个表都是同一数据库的
问题: 是否有可能有一个字段被 JPA 保留但被序列化跳过? 可以实现相反的效果(JPA 跳过字段而序列化则不会),如果使用此功能,那么相反的操作肯定会很有用。 类似这样的事情: @Entity cl
假设我有一个名为“dp”的表 Year | Month | Payment| Payer_ID | Payment_Recipient | 2008/2009 | July
我将尝试通过我的 Raspberry Pi 接入点保证一些 QoS。 开始之前,我先动手:我阅读了有关 tcp、udp 和 ip header 的内容。在IP header description我看
如果你能弄清楚如何重命名这个问题,我愿意接受建议。 在 Dart 语言中,可以编写一个带有 final 字段的类。这些是只能设置的字段构造函数前 body 跑。这可以在声明中(通常用于类中的静态常量)
你怎么样? 我有两个带有两个字段的日期选择器 我希望当用户选择 (From) 时,第二个字段 (TO) 将是 next day 。比如 booking.com 例如:当用户选择From 01-01-2
我想我已经看到了这个问题的一些答案,这些答案可能与我需要的相差不远,但我对 mysql 的了解还不够确定,所以我会根据我的具体情况提出问题。 我有一个包含多个表的数据库,为此,如果“image”表上的
我在 mySQL 数据库中有 2 个表: customers ============ customer_id (1, 2 ) customer_name (john, mark) orders ==
我正在开发一个员工目标 Web 应用程序。 领导/经理在与团队成员讨论后为他们设定目标。这是一年/半年/季度,具体取决于组织遵循的评估周期。 现在的问题是添加基于时间段的字段或存档上一季度/年度数据的
我正在寻找允许内容编辑器从媒体库中选择多个文件的东西,这些文件将在渲染中列出。他们还需要能够上传文件和搜索。它必须在页面编辑器(版本 8 中称为体验编辑器)中工作。 到目前为止我所考虑的: 一堆文件字
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
我想知道是否有一些步骤/解决方案可以处理错误消息并将它们放入 Pentaho 工具中的某个字符串或字段中?例如,如果连接到数据库时发生某些错误,则将该消息从登录到字符串/字段。 最佳答案 我们在作业的
如何制作像短信应用程序一样的“收件人”字段?例如,右侧有一个“+”按钮,当添加某人时,名称将突出显示并可单击,如圆角矩形等。有没有内置的框架? 最佳答案 不,但请参阅 Three20 的 TTMess
是否可以获取记录的元素或字段的列表 通过类型信息类似于类的已发布属性的列表吗? 谢谢 ! 最佳答案 取决于您的delphi版本,如果您使用的是delphi 2010或更高版本,则可以使用“新rtti”
我正在构建一个 SQLite 数据库来保存我的房地产经纪人的列表。我已经能够使用外键来识别每个代理的列表,但我想在每个代理的记录中创建一个列表;从代理商和列表之间的一对一关系转变为一对多关系。 看这里
我是一名优秀的程序员,十分优秀!