我正在尝试在多页tiff文件上执行条形码识别.但是tiff文件是从传真服务器(我无法控制)来找我的,它以非方形像素长宽比保存tiff.这导致图像由于纵横比而被严重压扁.我需要将tiff转换为正方形像素宽高比,但不知道如何在C#中执行此操作.我还需要拉伸图像,以便改变宽高比仍然使图像清晰可辨.
有没有人用C#做过这个?或者有没有人使用过将执行此类程序的图像库?
我需要打开WPF中的Tiff图像到内存中的所有帧,然后删除源.之后,我最终需要渲染该图像(根据窗口大小调整大小).我的解决方案非常慢,我无法在第一次要求之前删除文件源.任何最佳做法?
我试图TIFF通过代码在C#中设置Image的dpi值,但不知何故,保存Image后值不会保留.
using (var image = new Bitmap(@"c:\newimage.tif"))
{
uint[] uintArray = { 300, 1}; //Setting DPI as 300
byte[] bothArray = ConvertUintArrayToByteArray(uintArray);
PropertyItem item = image.PropertyItems.Where(p => p.Id == 0x11A).Single();
var val = BitConverter.ToUInt32(item.Value, 0);
Console.WriteLine(val);
item.Id = 0x11A;
item.Value = bothArray;
item.Type = 5;
item.Len = item.Value.Length;
image.SetPropertyItem(item);
image.Save(@"c:\newimage1.tif"); //Save image to new File
}
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题?任何形式的帮助将不胜感激. TIFF文件标记定义
我正在尝试使用BufferedImage从文件中读取TIFF图像.以下是我的代码:
String filename = "/image/parrot.tiff";
File f = new File (filename);
try{
BufferedImage img = ImageIO.read(f);
}catch (Exception e){
System.out.println("Something went wrong!");
}
Run Code Online (Sandbox Code Playgroud)
但它没有用.我有一个名为testInput的方法来测试文件是否被正确读取:
public void testInput(){
System.out.println(f.exists());
System.out.println(f.canRead());
System.out.println(f.canWrite());
}*/
Run Code Online (Sandbox Code Playgroud)
他们三个总是返回"false",上面的代码总是返回"出错了!".我已经为插件添加了JAI ImageIO来读取TIFF图像.知道什么似乎是问题吗?
如何查看Windows计算机上安装的Windows映像组件版本?我怀疑Azure中使用的Windows 2008 Server与我在Windows 7开发机器上的版本不同.我只想验证我需要最新的TIFF编解码器.
我的问题是,如何才能将.tif文件成功加载到Java中的Image实例中?
现在让我提供更多细节。我已经阅读了很多关于stackoverflow的关于如何在Java中处理/转换TIF图像的线程。我已经尝试了很多stackoverflow建议(我说建议,因为很少有人问他们回来说什么对他们有用)。我很确定我需要使用Java Advanced Imaging(JAI)库,但我认为我不知道如何使用它。现在让我解释一下该项目:
我正在从“处理”草图中获取帧的屏幕,然后使用Xuggler将其编码为视频。在草图中,我使用Processing的save(file filePath)函数将当前帧保存到文件中。我曾经有过save(“ img” + i +“。jpg”),但是创建jpg时发生的压缩将录制速度减慢到9-10fps,所以我切换了文件扩展名以查看是否可以改变结果,而save(“ img” + i“ .tif”)最快,我可以以22-23fps的速度录制。
处理可以将图像另存为.tif文件。但是遗憾的是,如果没有库,Java无法将.tif文件加载回去。我以前有代码:
Image img = Toolkit.getDefaultToolkit()。getImage(“ pics / img” + i +“。jpg”);
该行代码会将.jpg文件加载到img中,我会很好地对视频进行编码。但是这行代码(用tif而不是jpg):
Image img = Toolkit.getDefaultToolkit()。getImage(“ pics / img” + i +“。tif”);
将不会加载任何图像。我仍然可以使用Xuggler对视频进行编码,但是图像为空白,因此我认为此方法无法加载我的.tif文件。
我正在Windows 8计算机上使用Eclipse。任何帮助将不胜感激!
我正在使用以下代码来测试创建位图并将其保存为TIFF文件.代码工作正常,但在我的一台计算机上生成的TIFF产生的MD5哈希值与我运行代码的其他几台计算机不同.所有计算机上的图像都相同,但由于某种原因,文件略有不同.使用十六进制编辑器进行检查,看起来页脚中的差异仅为4个字节.我使用LinqPad执行下面的代码.结果如下:
CPU 1 (Windows 7) Hash: 7A-F7-F4-C5-1A-02-10-D5-FC-C9-40-A1-4F-18-D7-FE
Others (Windows 7/8) Hash: 0D-5D-23-58-2F-DE-D5-B3-CB-73-31-E1-37-CF-32-3C
Run Code Online (Sandbox Code Playgroud)
这是测试代码:
void Main()
{
using(var bmp = new Bitmap(100, 100))
{
using(var g = Graphics.FromImage(bmp))
{
g.FillRectangle(Brushes.Blue, 10, 10, 80, 80);
}
using(var ms = new MemoryStream())
{
SaveBitmapAsTIFFToStream(ms, bmp);
ms.Position = 0;
var provider = new MD5CryptoServiceProvider();
string hash = BitConverter.ToString(provider.ComputeHash(ms));
Console.WriteLine(hash);
}
}
}
public static void SaveBitmapAsTIFFToStream(Stream stream, Bitmap b)
{
b.Save(stream, FindEncoder(ImageFormat.Tiff), null);
}
private static ImageCodecInfo FindEncoder(ImageFormat fmt)
{
return ImageCodecInfo.GetImageEncoders()
.FirstOrDefault(info1 => …Run Code Online (Sandbox Code Playgroud) 我在Windows 7上使用带有Java 7(1.7.0_71)64位的iText版本5.5.6(也测试了5.3.4)
这是一个示例代码
@Test
public void testConvert() throws Exception {
try{
//Read the Tiff File
RandomAccessFileOrArray myTiffFile=new RandomAccessFileOrArray("C:\\local\\docs\\test.01.tif");
//Find number of images in Tiff file
int numberOfPages= TiffImage.getNumberOfPages(myTiffFile);
System.out.println("Number of Images in Tiff File: " + numberOfPages);
Document TifftoPDF=new Document();
PdfWriter.getInstance(TifftoPDF, new FileOutputStream("C:\\local\\docs\\test.01.pdf"));
TifftoPDF.open();
//Run a for loop to extract images from Tiff file
//into a Image object and add to PDF recursively
for(int i=1;i<=numberOfPages;i++){
//*******
//******* this next line is generating the error
//*******
Image tempImage=TiffImage.getTiffImage(myTiffFile, i);
TifftoPDF.add(tempImage); …Run Code Online (Sandbox Code Playgroud) 我从下面的链接下载了一个btf文件(大tiff),我怎么读它并"imshow"呢?有没有办法将它转换为tiff格式,因为btf不常见?
链接:
https://drive.google.com/file/d/0ByhuP_NuuARtSW9aeTdPUTlRdWM/view?usp=drive_web
http://www.photomacrography.net/forum/viewtopic.php?t=28990&sid=cca737a2e0bc7ea3e2e41f0d6e75f5a9
我用过这段代码:
t = Tiff('d:/Image_687.btf','w8');
imageData = read(t);
Run Code Online (Sandbox Code Playgroud)
并得到此错误:
使用tifflib时出错无法检索PhotometricInterpretation.
Tiff/getTag中的错误(第838行)tagValue = tifflib('getField',obj.FileID,Tiff.TagID.(tagId));
Tiff/read中的错误(第1487行)photo = obj.getTag('Photometric');
Untitled2中的错误(第2行)imageData = read(t);
我tifffile在python中使用它来保存3通道tiff堆栈,然后将其读取到ImageJ或FIJI中。这些tiff堆栈在ImageJ中作为复合打开,每个通道分配了一个(可能是默认值)colormap / LUT。但是,分配的颜色不是我的图像有意义的颜色。我的问题是,使用保存图像时,我不知道如何为每个通道指定颜色图tifffile。
例如,我要分配以下颜色图:
这是我用来保存文件的代码:
# save hyperstack
with tifffile.TiffWriter(filename, bigtiff=False, imagej=True) as tif:
for i in range(t_stack.shape[0]):
tif.save(t_stack[i], metadata={'Composite mode': 'composite'})
Run Code Online (Sandbox Code Playgroud)
tiff必须保存有保存通道颜色图信息的元数据,因为我可以在ImageJ中手动编辑颜色分配,然后将其保存,关闭,然后再次打开文件时,它将保留我的手动颜色图分配。因此,我猜测必须有一个元数据标签(也许是颜色图?)可用于指定通道颜色,但是我找不到有关要使用的标签或语法的任何信息。