如何取出字节集图片的高度和宽度

如何取出字节集图片的高度和宽度,第1张

方法1

使用到位图 *** 作支持库

创建一个位图变量

载入数据

对这个位图 *** 作

-------------------------

版本 2

支持库 BmpOperate

支持库 spec

局部变量 , 位图

载入数据 (快照 (, , ))

调试输出 (取宽度 ())

调试输出 (取高度 ())

ASP本身不能实现该功能,但是可以用具有读写二进制文件功能的AdodbStream对象来间接实现

<%

'下面这段即可获得你要的那的宽和高

imgpath="images/photo/abcjpg"

set pp=new imgInfo

w = ppimgW(servermappath(imgpath))

h = ppimgH(servermappath(imgpath))

set pp=nothing

%>

<%

'这一段是所要用的类

Class imgInfo

dim aso

Private Sub Class_Initialize

set aso=CreateObject("AdodbStream")

asoMode=3

asoType=1

asoOpen

End Sub

Private Sub Class_Terminate

errclear

set aso=nothing

End Sub

Private Function Bin2Str(Bin)

Dim I, Str

For I=1 to LenB(Bin)

clow=MidB(Bin,I,1)

if ASCB(clow)<128 then

Str = Str & Chr(ASCB(clow))

else

I=I+1

if I <= LenB(Bin) then Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow))

end if

Next

Bin2Str = Str

End Function

Private Function Num2Str(num,base,lens)

dim ret

ret = ""

while(num>=base)

ret = (num mod base) & ret

num = (num - num mod base)/base

wend

Num2Str = right(string(lens,"0") & num & ret,lens)

End Function

Private Function Str2Num(str,base)

dim ret

ret = 0

for i=1 to len(str)

ret = ret base + cint(mid(str,i,1))

next

Str2Num=ret

End Function

Private Function BinVal(bin)

dim ret

ret = 0

for i = lenb(bin) to 1 step -1

ret = ret 256 + ascb(midb(bin,i,1))

next

BinVal=ret

End Function

Private Function BinVal2(bin)

dim ret

ret = 0

for i = 1 to lenb(bin)

ret = ret 256 + ascb(midb(bin,i,1))

next

BinVal2=ret

End Function

Private Function getImageSize(filespec)

dim ret(3)

asoLoadFromFile(filespec)

bFlag=asoread(3)

select case hex(binVal(bFlag))

case "4E5089":

asoread(15)

ret(0)="PNG"

ret(1)=BinVal2(asoread(2))

asoread(2)

ret(2)=BinVal2(asoread(2))

case "464947":

asoread(3)

ret(0)="GIF"

ret(1)=BinVal(asoread(2))

ret(2)=BinVal(asoread(2))

case "535746":

asoread(5)

binData=asoRead(1)

sConv=Num2Str(ascb(binData),2 ,8)

nBits=Str2Num(left(sConv,5),2)

sConv=mid(sConv,6)

while(len(sConv)<nBits4)

binData=asoRead(1)

sConv=sConv&Num2Str(ascb(binData),2 ,8)

wend

ret(0)="SWF"

ret(1)=int(abs(Str2Num(mid(sConv,1nBits+1,nBits),2)-Str2Num(mid(sConv,0nBits+1,nBits),2))/20)

ret(2)=int(abs(Str2Num(mid(sConv,3nBits+1,nBits),2)-Str2Num(mid(sConv,2nBits+1,nBits),2))/20)

case "FFD8FF":

do

d p1=binVal(asoRead(1)): loop while p1=255 and not asoEOS

if p1>191 and p1<196 then exit do else asoread(binval2(asoRead(2))-2)

dp1=binVal(asoRead(1)):loop while p1<255 and not asoEOS

loop while true

asoRead(3)

ret(0)="JPG"

ret(2)=binval2(asoRead(2))

ret(1)=binval2(asoRead(2))

case else:

if left(Bin2Str(bFlag),2)="BM" then

asoRead(15)

ret(0)="BMP"

ret(1)=binval(asoRead(4))

ret(2)=binval(asoRead(4))

else

ret(0)=""

end if

end select

ret(3)="width=""" & ret(1) &""" height=""" & ret(2) &""""

getimagesize=ret

End Function

Public Function imgW(pic_path)

Set fso1 = serverCreateObject("ScriptingFileSystemObject")

If (fso1FileExists(pic_path)) Then

Set f1 = fso1GetFile(pic_path)

ext=fso1GetExtensionName(pic_path)

select case ext

case "gif","bmp","jpg","png":

arr=getImageSize(f1path)

imgW = arr(1)

end select

Set f1=nothing

else

imgW = 0

End if

Set fso1=nothing

End Function

Public Function imgH(pic_path)

Set fso1 = serverCreateObject("ScriptingFileSystemObject")

If (fso1FileExists(pic_path)) Then

Set f1 = fso1GetFile(pic_path)

ext=fso1GetExtensionName(pic_path)

select case ext

case "gif","bmp","jpg","png":

arr=getImageSize(f1path)

imgH = arr(2)

end select

Set f1=nothing

else

imgH = 0

End if

Set fso1=nothing

End Function

End Class

%>

<script>

var image = new Image();

imagesrc = '>

分两个部分,一个是“多个”,一个是获取的宽、高。

第一个用循环做到,也就是用for、foreach之类的东西遍历你从页面中得到的数组

下一步用getimagesize()函数获得的信息。

此函数在php手册里有解释:图像生成与处理→GD→GD and image函数里。

此函数返回的结果如下:

返回一个具有四个单元的数组。索引 0 包含图像宽度的像素值,索引 1 包含图像高度的像素值。索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP 430 新加的 IMAGETYPE 常量对应。索引 3 是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG 标记。

BITMAP bmp;

int bmp_width;

int bmp_height;

if(GetObject(hBmp,sizeof(BITMAP),(LPSTR)&bmp))

{

bmp_width=bmpbmWidth;

bmp_height=bmpbmHeight;

}

你好,用软件Replace Pioneer 273或以上版本可以批量导出照片的长宽信息,详细步骤:

打开Tools->Batch Runner菜单

把图像文件从windows文件管理器拖拽到Batch Runner窗口中

点击Export List按钮打开导出文件窗口,在Format后面的下拉列表框选择[image file, width, height]一项

点击preview预览导出的结果, 如果不符合要求,可以自行编辑修改Format里的内容进行调整,比如:

只要文件名不要路径名,就可以把${FULLNAME}改为${FILENAME}

只要高度不要宽度,就把%W去掉

点击Export即可。

  先很负责任的说一下,这个内容也是百度来的,但是很不负责任的是,当初只记录解决方案,忘了记录是查看的哪篇博客了,这里先对不知道借鉴的谁表示感谢。无法分享链接,就厚着脸皮把(转)字去掉了,请大家谅解。

  先提供一下 Android知识点——目录 的链接,然后让我们进入正题。

  实际上,这篇博客所说的内容并不是所有人都可以用到,毕竟大多数时候,我们只需要展示,而并不需要知道的宽高;有的时候我们只需要知道展示的宽高(即ImageView)的宽高,不需要知道资源的实际尺寸。

  但是需求千千万万嘛,以程序员的脑洞,怎么能想到产品的脑洞究竟有多大呢?我这里就遇到了一个需求,那就是需要在一个可缩放的上标注icon(类似地图上的marker)。这还不算完,毕竟在找到的缩放控件 PhotoView 中,我们点击到上后,是有点击点位在整个上的百分比坐标回调的。而多端通过百分比是很容易就能在中获取到相同的点位,并回显出对应的icon的(没办法,谁让我找的是方便计算百分比的呢),结果Web端优先做了这部分功能,使用的是在原图上的具体坐标。这样我百分比的计划自然就落空了,只能想办法计算出具体的点位。

  因此获取的原始尺寸就是一个必不可少的环节,我刚刚百度了一下,查到 wangke_king 的 Android获取的宽度和高度 中使用的方法是:

  我这里没有亲测过,不过应该是没有问题,但是很遗憾我们的需求是在网络上做测量,所以这个方法也无法使用,不过如果其他有类似本地需求的,不妨尝试一下。而我之前找到的解决方案为:

  首先说明,上述的方法是可以实现的尺寸测量的,只是有一个小小的问题,那就是想要计算出Drawable的宽高,需要必须等到加载完成之后,尝试了使用viewpost(),监听组件加载完成,但是并不是每次都能获取到Drawable的宽高,因此当初的解决方案是写了个两秒钟的定时器,每50毫秒测量一次,直到获取到值为止。这样的解决方案可谓是相当无脑了,而且还要消耗很多不必要的资源。

  还好皇天不负有心人啊,终于找到了通过Glide获取宽高的方式:

  这样我们就可以通过回调,在Glide将网络注入到对应的组件的时候,得到的Bitmap,然后在通过Bitmap来获取的宽高。但是需要注意的一点是,Bitmap的泛型是需要手动去设置的哦。

  另外SimpleTarget现在已经过时,暂时还没有查到。我搜索过SimpleTarget过时使用什么替换,有一些说法是使用BitmapImageViewTarget ,不过下面是实际测试结果。

链接:

百度-景色

测量结果:

信息:

如果不是我使用有误的话,BitmapImageViewTarget 是无法替换SimpleTarget ,实现测量原始宽高的功能的。

#include <stdioh>

#include <malloch>

#include <stdlibh>

#include <iostream>

using namespace std;

/位图信息头BITMAPINFOHEADER,这个结构的长度是固定的,为40个字节其定义如下:/

typedef struct tagBITMAPINFOHEADER

{

unsigned long biSize; /指定这个结构的长度,为40/

long biWidth; /指定图象的宽度,单位是象素/

long biHeight; /指定图象的高度,单位是象素/

unsigned short biPlanes; /必须是1,不用考虑/

unsigned short biBitCount; /指定表示颜色时要用到的位数,常用的值为1(黑白二色图),4(16色图),8(256色),24(真彩色图)/

unsigned long biCompression; /指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS/

unsigned long biSizeImage; /指定实际的位图数据占用的字节数/

long biXpolsPerMeter; /指定目标设备的水平分辨率,单位是每米的象素个数。/

long biYpelsPerMeter; /指定目标设备的垂直分辨率,单位同上。/

unsigned long biClrUsed; /指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次方。/

unsigned long biClrImportant; /指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。/

}BITMAPINFOHEADER;

void main()

{

BITMAPINFOHEADER bitmapinfoheader;

FILE stream;

memset(&bitmapinfoheader,0,sizeof(BITMAPINFOHEADER));

stream=fopen("E:\\3bmp","r");

fseek(stream,14,1);

fread((char)&bitmapinfoheader,sizeof(BITMAPINFOHEADER),1,stream);

fclose(stream);

cout<<bitmapinfoheaderbiHeight<<endl;

cout<<bitmapinfoheaderbiWidth<<endl;

}

调试运行正确 128128

以上就是关于如何取出字节集图片的高度和宽度全部的内容,包括:如何取出字节集图片的高度和宽度、用asp如何获得服务器文件夹的图片的宽度和高度、js 获取图片的高度和宽度问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9663460.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存