小编kay*_*ahr的帖子

如何用Image Magick将SVG转换为PNG?

我有一个SVG文件,其定义大小为16x16.当我使用Image Magick的转换程序将其转换为PNG时,我得到一个16x16像素的PNG,这太小了:

convert test.svg test.png
Run Code Online (Sandbox Code Playgroud)

我需要指定输出PNG的像素大小.-size参数似乎被忽略,-scale参数在转换为PNG 缩放PNG.到目前为止,我通过使用-density参数得到了最好的结果:

convert -density 1200 test.svg test.png
Run Code Online (Sandbox Code Playgroud)

但是我不满意,因为我想要以像素为单位指定输出大小而不用数学来计算密度值.所以我想做这样的事情:

convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png
Run Code Online (Sandbox Code Playgroud)

那么我在这里使用的神奇参数是什么?

svg png imagemagick

358
推荐指数
15
解决办法
18万
查看次数

如何从Maven反应堆构建中排除模块?

我们有一个Maven 2项目,里面有很多模块.例:

<modules>
  <module>common</module>
  <module>foo</module>
  <module>data</module>
  <module>bar</module>
  ... more ...
</module>
Run Code Online (Sandbox Code Playgroud)

假设构建"数据"模块非常耗时,我们希望在CI服务器构建项目时将其排除.目前我们使用两个pom.xml文件来实现这一目标.一个包含所有模块,另一个包含所有模块,除了可以省略CI的模块.但这很烦人,因为有时我们会忘记将新模块放入两个文件中.

有没有一个解决方案不需要两个单独的模块列表?

maven-2 maven

90
推荐指数
5
解决办法
8万
查看次数

如何确定Git是将文件处理为二进制还是文本?

我知道Git会以某种方式自动检测文件是二进制还是文本,如果需要,可以使用gitattributes手动设置它.但是有没有办法向GIT询问它如何处理文件?

所以我们可以说我有在这两个文件一个Git仓库:一个ascii.dat含纯文本和文件binary.dat含随机二进制的东西文件.Git将第一个dat文件作为文本处理,将辅助文件作为二进制文件处理.现在我想写一个Git webfrontend,它有一个文本文件查看器和二进制文件的特殊查看器(例如,显示十六进制转储).当然,我可以实现自己的文本/二进制检查,但如果查看器依赖于Git如何处理这些文件的信息,那将会更有用.

那么我怎么能问Git它是否将文件视为文本或二进制文件?

git

73
推荐指数
5
解决办法
2万
查看次数

如何用C++编写自定义输入流

我正在学习C++(来自Java),我正在尝试理解如何在C++中正确使用IO流.

假设我有一个Image包含图像像素的类,我重载了提取操作符以从流中读取图像:

istream& operator>>(istream& stream, Image& image)
{
    // Read the image data from the stream into the image
    return stream;
}
Run Code Online (Sandbox Code Playgroud)

所以现在我能够读到这样的图像:

Image image;
ifstream file("somepic.img");
file >> image;
Run Code Online (Sandbox Code Playgroud)

但现在我想使用相同的提取运算符从自定义流中读取图像数据.假设我有一个包含压缩形式图像的文件.因此,我可能想要实现自己的输入流,而不是使用ifstream.至少我就是这样用Java做的.在Java中,我会编写一个扩展InputStream类并实现该int read()方法的自定义类.所以这很容易.用法看起来像这样:

InputStream stream = new CompressedInputStream(new FileInputStream("somepic.imgz"));
image.read(stream);
Run Code Online (Sandbox Code Playgroud)

所以使用相同的模式我想在C++中这样做:

Image image;
ifstream file("somepic.imgz");
compressed_stream stream(file);
stream >> image;
Run Code Online (Sandbox Code Playgroud)

但也许这是错误的方式,不知道.扩展istream类看起来相当复杂,经过一些搜索后我发现了一些关于扩展的提示streambuf.但是这个例子对于这么简单的任务看起来非常复杂.

那么在C++中实现自定义输入/输出流(或streambufs?)的最佳方法是什么?

有些人建议不要使用iostreams,而是使用迭代器,boost或自定义IO接口.这些可能是有效的替代品,但我的问题是关于iostreams.接受的答案产生了下面的示例代码.为了更容易阅读,没有标题/代码分离,导入整个std命名空间(我知道这在实际代码中是一件坏事).

这个例子是关于读写垂直xor编码的图像.格式非常简单.每个字节代表两个像素(每像素4位).每行与前一行xor'd.这种编码使图像准备好进行压缩(通常会导致大量的0字节更容易压缩).

#include <cstring>
#include <fstream>

using namespace std;

/*** vxor_streambuf class ******************************************/

class vxor_streambuf: public …
Run Code Online (Sandbox Code Playgroud)

c++ iostream

53
推荐指数
2
解决办法
4万
查看次数

在这个C++代码中技术上发生了什么?

我有一个B包含类向量的类A.我想通过构造函数初始化此向量.类A输出一些调试信息,以便我可以看到它何时被构造,破坏,复制或移动.

#include <vector>
#include <iostream>

using namespace std;

class A {
public:
    A()           { cout << "A::A" << endl; }        
    ~A()          { cout << "A::~A" << endl; }               
    A(const A& t) { cout <<"A::A(A&)" << endl; }              
    A(A&& t)      { cout << "A::A(A&&)" << endl; }            
};

class B {
public:
    vector<A> va;
    B(const vector<A>& va) : va(va) {};
};

int main(void) {
    B b({ A() });
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在,当我运行这个程序(使用GCC选项编译,-fno-elide-constructors因此移动构造函数调用未被优化掉)时,我得到以下输出:

A::A …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

45
推荐指数
2
解决办法
4373
查看次数

如何使用Spring MVC/Spring Boot编写正确的全局错误处理程序

我正在编写一个使用Spring 4.0.4和Spring Boot 1.0.2的Web应用程序,使用Tomcat作为嵌入式Web容器,我想实现一个全局异常处理,它拦截所有异常并以特定方式记录它们.我的简单要求是:

  • 我想全局处理尚未在其他地方处理的所有异常(例如在控制器异常处理程序中).我想记录消息,我想向用户显示自定义错误消息.
  • 我不希望Spring或Web容器自己记录任何错误,因为我想自己这样做.

到目前为止,我的解决方案看起来像这样(简化,没有日志记录,也没有重定向到错误视图):

@Controller
@RequestMapping("/errors")
public class ErrorHandler implements EmbeddedServletContainerCustomizer
{
    @Override
    public void customize(final ConfigurableEmbeddedServletContainer factory)
    {
        factory.addErrorPages(new ErrorPage("/errors/unexpected"));
        factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/errors/notfound"));
    }

    @RequestMapping("unexpected")
    @ResponseBody
    public String unexpectedError(final HttpServletRequest request)
    {
        return "Exception: " + request.getAttribute("javax.servlet.error.exception");
    }

    @RequestMapping("notfound")
    @ResponseBody
    public String notFound()
    {
        return "Error 404";
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是该unexpectedError方法正确处理控制器中抛出的异常,并且该方法处理404状态代码notFound.到目前为止很好,但我有以下问题:

  • Tomcat或Spring(不确定谁负责)仍在记录错误消息.我不希望这样,因为我想自己记录(附加信息),我不希望日志中出现重复的错误消息.如何防止此默认日志记录?
  • 我访问异常对象的方式似乎不对.我从request属性中获取if javax.servlet.error.exception.这甚至不是抛出的异常,它是一个实例,org.springframework.web.util.NestedServletException我必须深入到这个嵌套异常中来获取真实异常.我很确定有一种更简单的方法,但我找不到它.

那么我该如何解决这些问题呢?或者我实现这个全局异常处理程序的方式是完全错误的,还有更好的选择吗?

java spring tomcat spring-mvc spring-boot

39
推荐指数
1
解决办法
5万
查看次数

在Windows 7上启动Java应用程序的最佳方法是什么?

要求

我想在Windows 7上发布Java GUI应用程序.此应用程序使用Swing Toolkit,不需要任何本机代码.使用NSIS安装程序安装该应用程序.我想尽可能地将此应用程序集成到Windows 7中.这意味着:

  • 当应用程序运行时,必须可以将应用程序固定到任务栏.
  • 必须可以将数据文件与应用程序相关联,以便Windows使用我的应用程序打开这些文件.
  • 必须自动使用32位Java运行时和64位Java运行时.因此,当用户卸载32位Java并安装64位Java时(反之亦然),那么我的应用程序仍然可以工作.
  • 必须支持Windows的大字体设置.我真的不明白这个功能.我只知道有些应用程序完全忽略它,其他应用程序(如谷歌浏览器)是像素缩放的(看起来真的很难看)而其他人只是按照预期使用更大的字体来支持它(这就是我想要的,通常它的工作原理.只有WinRun4J解决方案下面提到的不起作用).

测试解决方案

WinRun4J

WinRun4j是一个启动Java应用程序的EXE文件.因为应用程序没有分叉新的Java进程,Windows认为EXE文件是应用程序.所以任务栏没有问题.文件关联有效,因为文件可以简单地与EXE文件关联.

问题:

  • 不支持大字体.应用程序窗口是像素缩放的(与谷歌浏览器一样).
  • 必须使用两个不同的EXE文件,具体取决于安装的JRE.因此,当安装64位JRE时,必须使用64位EXE文件启动应用程序.当安装32位JRE时,必须使用另一个EXE.这不是用户友好的,因为当仅安装32位JRE时,用户不理解为什么他必须在64位操作系统上使用32位EXE.

Launch4J

Launch4J创建了一个32位EXE,它启动了一个外部Java进程来启动Java应用程序.因此,与WinRun4J不同,它也可以启动64位Java.

问题:

  • 无法将应用程序固定到任务栏.
  • System.out.printlnheaderType="gui"无论是否从控制台启动应用程序,都不会打印到控制台.

在Windows上,您只需双击JAR文件即可启动该应用程序.安装JRE并不重要,只是工作.但...

问题:

  • 应用程序无法固定到任务栏.
  • 无法在开始菜单中创建快捷方式.
  • 无法将文件与JAR文件关联.

BAT/CMD

像这样的简单批处理文件可用于启动应用程序:

@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1
Run Code Online (Sandbox Code Playgroud)

可以为此批处理文件创建快捷方式以设置自定义图标.

问题:

  • 启动应用程序时会弹出DOS窗口.
  • 批处理文件不知道javaw.exe的位置.根据安装的Java版本(32位或64位),它可能位于其中c:\windows\syswow64,Windows不会自动从批处理文件重定向此调用.使用JAVA_HOME环境变量也是不可取的,因为Java不会自动设置它.
  • 将文件与批处理文件关联时,不能设置自定义图标.
  • 任务栏支持无法正常工作.当手动启动批处理文件时,可以将应用程序固定到它,但是当双击相关文件时它不起作用.

捷径

可以仅创建启动应用程序的快捷方式,而不是使用批处理文件.它链接到这个命令:c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar".如果安装了32位Java JRE,Windows会自动将此调用重定向到SysWOW64目录.

问题:

  • 无法将文件与其关联,因为Windows仅接受EXE/COM/PIF/BAT/CMD文件作为关联目标.LNK文件不起作用.

还有另一种解决方案可以满足上述所有要求吗?或者有没有任何技巧来解决上述解决方案的问题?

使用Launch4j解决任务栏固定问题后,看起来是最好的解决方案.Launch4j可以很容易地集成到Maven项目中(使用这个这个插件),配置非常简单,除了任务栏固定外,一切都是开箱即用的.对于任务栏固定,Java应用程序必须按照此问题的答案中的说明设置appModelUserId .

此外,Java应用程序必须由安装程序安装,安装程序必须至少安装一个指向EXE的快捷方式.此快捷方式还必须包含appModelUserId.使用NSIS,可以使用WinShell插件 …

java windows batch-file launch4j winrun4j

36
推荐指数
2
解决办法
2万
查看次数

如何针对HTML和JSON请求以不同方式处理Spring MVC中的异常

我在Spring 4.0.3中使用以下异常处理程序拦截异常并向用户显示自定义错误页面:

@ControllerAdvice
public class ExceptionHandlerController
{
    @ExceptionHandler(value = Exception.class)
    public ModelAndView handleError(HttpServletRequest request, Exception e)
    {
        ModelAndView mav = new ModelAndView("/errors/500"));
        mav.addObject("exception", e);
        return mav;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是现在我想要对JSON请求进行不同的处理,以便在发生异常时获得此类请求的JSON错误响应.目前,上述代码也由JSON请求(使用Accept: application/json标头)触发,JavaScript客户端不喜欢HTML响应.

如何针对HTML和JSON请求以不同方式处理异常?

java spring spring-mvc jackson

30
推荐指数
3
解决办法
2万
查看次数

在Java中将字节转换为int的最优雅方式

示例代码:

int a = 255;
byte b = (byte) a;
int c = b & 0xff; // Here be dragons
System.out.println(a);
System.out.println(b);
System.out.println(c);
Run Code Online (Sandbox Code Playgroud)

所以我们从255的整数值开始,将其转换为一个字节(变为-1),然后使用魔术公式将其转换回int.预期的产出是:

255
-1
255
Run Code Online (Sandbox Code Playgroud)

我想知道这a & 0xff是否是这种转换最优雅的方式.checkstyle例如抱怨在这个地方使用一个幻数,并且忽略这个检查的值不是一个好主意,因为在其他地方255可能真的是一个应该避免的幻数.而且我自己为这样的东西定义常量非常烦人.所以我想知道JRE中是否有一种标准方法来代替这种转换?或者可能是已定义的具有最高无符号字节值的常量(类似于Byte.MAX_VALUE,这是最高的有符号值)

所以要保持简短的问题:如何在不使用幻数的情况下将字节转换为int?

好的,到目前为止提到了以下可能性:

  • 继续使用& 0xff并忽略checkstyle中的幻数255.缺点:其他可能在某些其他范围(不是位操作)中使用此数字的地方也不会被检查.优点:简单易读.
  • 为它定义我自己的常量,然后使用代码& SomeConsts.MAX_UNSIGNED_BYTE_VALUE.缺点:如果我需要在不同的类中,那么我必须为这个darn常量定义我自己的常量类.优势:这里没有神奇的数字.
  • 做一些聪明的数学就好b & ((1 << Byte.SIZE) - 1).编译器输出很可能是相同的,因为它被优化为常量值.缺点:代码相当多,难以阅读.优点:只要1没有定义为幻数(checkstyle默认忽略它),我们这里没有幻数,我们不需要定义自定义常量.当字节有一天被重新定义为16位(开玩笑)时它仍然有效,因为Byte.SIZE将是16而不是8.

还有更多想法吗?也许其他一些聪明的逐位操作比上面的那个短,只使用0和1之类的数字?

java

27
推荐指数
3
解决办法
2万
查看次数

如何处理在Spring MVC中呈现视图时抛出的异常?

我有一个Spring MVC应用程序,它使用FreeMarker作为View技术(但也许视图技术对我的问题并不重要).我需要拦截在请求期间可能抛出的所有异常.

我已经实现了HandlerExceptionResolver,但只有在控制器中发生异常时才会执行此解析程序.但是当控制器返回ModelAndView并且在渲染视图时发生异常(因为找不到变量或类似的东西),则不会调用异常解析器,而是在浏览器窗口中获得堆栈跟踪.

我还尝试在控制器中使用异常处理程序方法,该方法返回视图并使用@ExceptionHandler对其进行注释,但这也不起作用(很可能是因为异常不会在控制器中抛出但在视图中).

那么是否有一些Spring机制可以注册一个捕获视图错误的异常处理程序?

java spring freemarker spring-mvc

27
推荐指数
2
解决办法
2万
查看次数