方法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 获取图片的高度和宽度问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)